附註:

使用 API 簽署金鑰運用 OCI Identity and Access Management Identity Domains REST API

簡介

與 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) Identity Domains API 整合時,OAuth 2.0 是保護 API 要求的最常見方法。不過,在某些使用案例中,特別是簡單性與直接性至關重要時,API 簽署金鑰提供了可行的替代方案。

本教學課程將探討如何使用 API 簽署金鑰呼叫 OCI IAM 識別網域 API,為開發人員和管理員提供更簡單易用的選項。

為什麼要使用 API 簽署金鑰?

API 簽署金鑰提供直接驗證 API 要求的方式。它們很容易產生和使用,因此適用於需要簡單、程式設計存取的應用程式,而不需要複雜的 OAuth 記號交換程序。API 金鑰在下列情況中特別有用:

適用對象

OCI IAM 專業人員、開發人員和管理員。

目標

使用 API 簽署金鑰運用 OCI IAM 識別網域 REST API。為了有效地示範,您可以使用 Python 程式碼片段來開發命令檔。此命令檔說明如何使用 API 簽署金鑰進行認證,與 OCI IAM 識別網域 API 互動。其中也涵蓋建立群組、建立使用者以及將使用者指派給群組的基本作業,示範如何使用安全 API 要求以程式設計方式執行這些動作。使用 API 金鑰簡化了流程,使這些作業更容易整合到自動化工作流程或指令碼中。

必要條件

作業 1:匯入 Python 套裝軟體與初始設定

命令檔的初始部分會設定必要的匯入和組態,以便使用 API 金鑰與 OCI IAM 識別網域 API 互動。

import requests
import json
from oci.config import from_file
from oci.signer import Signer

作業 2:定義和初始化類別

此程式碼片段定義使用 API 金鑰管理 OCI IAM 識別網域 API 互動的 APISignedRequest 類別。

class APISignedRequest():
    def __init__(self):
        global auth
        global identity_domain
        global config

        config = from_file()
        auth = Signer(
            tenancy=config['tenancy'],
            user=config['user'],
            fingerprint=config['fingerprint'],
            private_key_file_location=config['key_file']
        )
        identity_domain = 'https://idcs-############################.identity.oraclecloud.com'

作業 3:建立群組方式

APISignedRequest 類別中的 creategroup 方法的設計是在 OCI IAM 識別網域中建立新群組。

def creategroup(self):
    extra = "/admin/v1/Groups"
    body = {
        "displayName": "Example Group",
        "externalId": "123456",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
            "creationMechanism": "api",
            "description": "Example Description"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:Group",
            "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group",
            "urn:ietf:params:scim:schemas:extension:custom:2.0:Group"
        ]
    }

    response = requests.post(identity_domain + extra, auth=auth, json=body)
    jsonresp = json.loads(response.content)
    grpid = jsonresp.get("id")
    print("Group has been created")
    return grpid

作業 4:建立使用者方式

APISignedRequest 類別中的 createuser 方法的設計是在 OCI IAM 識別網域中建立新使用者。

def createuser(self):
extra = "/admin/v1/Users"
body = {
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ],
  "name": {
    "givenName": "Test",
    "familyName": "User"
  },
  "userName": "testuser@example.com",
  "emails": [
    {
      "value": "testuser@example.com",
      "type": "work",
      "primary": True
    },
    {
      "value": "testuser@example.com",
      "primary": False,
      "type": "recovery"
    }
  ]
}

response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
userid = jsonresp.get("id")
print("User has been created")
return userid  

作業 5:將使用者指定至群組方式

APISignedRequest 類別中的 assignuser 方法會處理將使用者指派給 OCI IAM 識別網域中的群組的程序。

def assignuser(self):
    extra = "/admin/v1/Groups/"
    obj = APISignedRequest()
    grpid = obj.creategroup()
    gid = str(grpid)
    userid = obj.createuser()

    body = {
      "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
      ],
      "Operations": [
        {
          "op": "add",
          "path": "members",
          "value": [
            {
              "value": userid,
              "type": "User"
            }
          ]
        }
      ]
    }

    response = requests.patch(identity_domain + extra + gid, auth=auth, json=body)
    print("User has been assigned to the group")

工作 6:執行流程

建立執行處理和呼叫方法:建立 APISignedRequest 的執行處理,並呼叫 assignuser 來執行整個流程。

obj = APISignedRequest()
obj.assignuser()

作業 7:使用 OCI Cloud Shell 中的命令檔

命令檔就緒之後,就可以在本機機器 (已安裝 Python) 或任何支援 Python 開發的整合開發環境 (IDE) 上輕鬆執行。我們使用 OCI Cloud Shell 執行命令檔並取得想要的報表。

  1. 登入 OCI 主控台,從右上角開啟 OCI Cloud Shell,然後上傳 Python 命令檔 OCIAPISignedRequest.py

注意OCIAPISignedRequest.py 是使用上述工作程式碼片段開發的 Python 命令檔。

影像 1

影像 2

影像 3

  1. 執行 python OCIAPISignedRequest.py 命令。

結論

使用 API 金鑰呼叫 OCI IAM 識別網域 API 提供直接的 OAuth 替代方案,適用於簡單性和易用性的特定使用案例至關重要。本教學課程之後,您可以運用 API 金鑰的強大功能進行認證,安全且有效率地與 OCI IAM 識別網域 API 整合。

無論您是要將管理工作自動化、建置內部工具或原型設計應用程式,API 金鑰都能提供靈活方便的方式與 OCI 服務互動。

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center