注意:

使用 API 签名密钥利用 OCI 身份和访问管理身份域 REST API

简介

与 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 身份域 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:定义和初始化类

该代码片段定义了一个类 APISignedRequest,用于使用 API 密钥管理与 OCI IAM 身份域 API 的交互。

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 帮助中心