手动配置基于角色的访问控件

您可以在 Oracle Cloud Infrastructure 中使用 JSON Web Token (JWT) 定制声明来配置 Role-Based Access Control (RBAC)。

要创建允许使用 JWT 自定义声明的 RBAC 的域集成应用程序,请执行以下操作: 以下各节详细解释了每个步骤。

注意:

本文档使用 Oracle Cloud InfrastructureDefault 域进行说明。

为用户创建自定义属性

用户实体将其属性和其他信息存储为属性。例如,名字、姓氏、用户登录名、密码等。您可以在 Oracle Cloud Infrastructure 中创建定制属性。

下面是定义定制用户属性的示例,该属性将存储分配给域中的每个用户的角色。
  1. 单击汉堡菜单,然后转至身份和安全,然后选择。在 "Name"(名称)下,单击 Default 域。
  2. 转到方案管理选项卡,然后选择用户属性

  3. 单击添加属性并指定以下内容:
    • 显示名称ORDS RBAC
    • 名称rbac_ords
    • 说明ORDS 的基于角色的访问控制
    • 数据类型String Array(字符串数组)

    您可以将其余字段保留为其默认状态。



    单击添加。您已添加自定义属性。

  4. 通过在搜索字段中键入定制来搜索新添加的属性。您将在列表中查看 ORDS RBAC 属性。

    单击编辑属性

  5. 复制并记下 FQN (全限定名称)的值。

    在此示例中, FQNurn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords

分配定制角色

创建自定义用户属性后,可以继续在该属性字段中分配自定义角色。
  1. 导航到: IdentityDomainsDefault 。单击 User Management 选项卡,然后从显示的用户列表中选择您的用户名。



    单击编辑用户。向下滚动到 Other Information(其他信息)字段,然后在 ORDS RBAC 下输入 SQL Developer,SODA Developer(SODA 开发人员)

    有关 ORDS 角色的更多信息,请参阅关于 Oracle REST Data Services 用户角色中的本章。



    添加角色后,单击保存更改

创建域集成应用程序

我们将在该域内开发一个集成应用程序,该应用程序将在登录时发出 JWT 令牌。

  1. 导航到: IdentityDomainsDefault 。单击集成应用程序选项卡,然后选择添加应用程序
  2. 单击机密应用程序,然后选择启动工作流
  3. 添加机密应用程序对话框中,指定以下字段:
    • 名称:输入机密应用程序的名称。例如, Spreadsheet-Addin RBAC
    • 描述:输入描述。例如, Integrated Application for the spreadsheet add-in role based access control



    单击提交

    您将查看新添加的 Spreadsheet-Addin RBAC 应用程序页。

  4. Spreadsheet-Addin RBAC 页面的 OAuth 配置选项卡中单击编辑 OAuth 配置



  5. 在 "Resource Server Configuration"(资源服务器配置)下,选择 Configure this application as a resource server now
  6. 配置需要 OAuth 保护的应用程序 API 中,选择 3600 作为访问令牌到期(秒)。
  7. 主要受众字段中,输入 ssaddin/
  8. 单击添加范围并添加 rbac 范围



  9. 客户机配置下,指定以下字段:
    • 选择立即将此应用程序配置为客户端
    • 允许的授权类型下选择隐式
    • 重定向 URL 字段中输入以下值:https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html
    • 注销后 URL 字段中输入以下值:https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html



    单击提交

    注意:

    确保激活应用程序。

定义自定义索赔

要在 JWT 中包括用户角色,必须使用自定义声明将第一部分中建立的自定义属性映射到 JWT。

为了实现这一点,我们需要创建一个额外的临时集成应用程序,并通过它附加自定义声明。

创建身份域集成应用程序

您将创建额外的临时集成应用程序:
  1. 导航到: IdentityDomainsDefault
  2. 单击集成应用程序选项卡,然后选择添加应用程序
  3. 单击机密应用程序,然后选择启动工作流
    • 输入应用程序的名称:身份域集成应用程序
    • 输入说明:这是域集成应用程序。

    单击提交

  4. 身份域集成应用程序页上,选择 OAuth 配置选项卡。
  5. 单击资源服务器配置上的编辑 OAuth 配置。在编辑 OAuth 配置对话框中,指定以下字段:

为 JWT 创建新索赔

我们要求 CLIENT IDCLIENT SECRETDOMAIN URL 检索身份域管理员应用程序的新访问令牌。

我们有您在上一步中创建的域集成应用程序中的 CLIENT IDCLIENT SECRET

可以在域页的“域信息”下找到 DOMAIN URL



运行以下命令并将 (CLIENT ID)(CLIENT SECRET)(DOMAIN URL) 值替换为您的值。

export ACCESS_TOKEN=$(curl -s -i -u"(CLIENT ID):(CLIENT SECRET)" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST (DOMAIN URL)/oauth2/v1/token -d
      "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" | tail -n +1 | grep -o
      '"access_token":"[^"]*' | cut -d'"' -f4)
在此示例中,您将使用以下值:
  • Client ID:123a1234e1234567aa12345a1abcdefg1
  • Client Secret:idcscs-12a1a123-a123-1234-1234-e1a05aabc123
  • Domain URL: https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443
在 Bash shell 中运行以下代码,并相应地替换占位符值:
export ACCESS_TOKEN=$(curl -s -i -u"123a1234e1234567aa12345a1abcdefg1: idcscs-12a1a123-a123-1234-1234-e1a05aabc123" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" |
          tail -n +1 | grep -o '"access_token":"[^"]*' | cut -d'"'
        -f4)
 
要验证是否已成功检索标记,请运行以下命令并查看显示的标记。
echo $ACCESS_TOKEN

下图显示了上述命令在 Bash shell 中的显示方式。



它显示由包含字母数字字符的多行(超过 10 行)组成的输出。

使用 (ROLE CLAIM NAME) 作为 ssaddin.role 运行以下命令,使用 urn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ords 运行 (MODIFIED FQN)

注意:

使用步骤 1 中的 FQN,并将最后一个 ":"“ 替换为 ””。

例如,步骤 1 中的 FQN 为:

urn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords

因此,MODIFIED FQN 应为:

urn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ords
curl -i -X POST (DOMAIN URL)/admin/v1/CustomClaims -H"Cache-Control: no-cache" -H"Accept:application/json" -H"Content-Type:application/json" -H"Authorization: Bearer $ACCESS_TOKEN" -d '{
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:CustomClaim"
    ],
    "name": "(ROLE CLAIM NAME)",
    "value": "$user.(MODIFIED FQN).*",     
    "expression": true,
    "mode": "always",
    "tokenType": "AT",
    "allScopes": false,
    "scopes": [
    "ssaddin/rbac"
  ]
}'

注意:

Domain URL 替换为上面的代码中的实际值。

您将看到以下内容作为输出:HTTP/1.1 201 Created

Autonomous AI Database Schema 启用 RBAC IAM 登录

以下说明允许 ORDS 验证 JWT 持有人令牌并授予对受保护资源的访问权限。
  1. 在“SQL Worksheet(SQL 工作表)”的“Navigator(导航器)”选项卡中,从“Schema(方案)”下拉列表中选择 ORDS_METADATA
  2. 从“对象类型”下拉列表中选择 Packages
  3. 在“搜索”字段中键入 ORDS_SECURITY。搜索函数检索以 ORDS_SECURITY 开头的所有条目。
  4. 展开 ORDS_SECURITY 软件包。



  5. 右键单击 CREATE_JWT_PROFILE,然后单击 RUN。这将打开 RUN CODE 对话框。
    在“Run Code …(运行代码…)”对话框中,指定以下字段值:
    • P_ISSUER -https://identity.oraclecloud.com/ 。此字段必须为非空值,并且必须在单个逗号内填充。
    • P_AUDIENCE - ssaddin/ 。此字段必须为非 NULL 值。
    • P_JWK_URL - 在 /admin/v1/SigningCert/jwk 中附加 DOMAIN URL 。它必须是以 https:// 开头的非空值,并标识授权服务器以 JSON Web 密钥 (JWK) 格式提供的公共验证密钥。

      您可以在 OCI 控制台的身份和安全导航菜单的菜单中存在的“域信息”选项卡中查看域 URL

    • P_DESCRIPTION - 输入此配置文件的说明。例如,“ RBAC JWT Demo confluence ”。
    • P_ALLOWED_AGE -"0"
    • P_ALLOWED_SKEW -"0"
    • P_ROLE_CLAIM_NAME - "ssaddin.role"

    单击将代码插入工作表中



    运行该过程。



    您将在输出面板中查看“PL/SQL 过程已成功完成”。

创建 Connections 文件

  1. 单击“连接”窗格标题上的添加按钮以添加连接。这将打开“添加新连接”对话框。

  2. 在“添加新连接”对话框上指定以下字段:
    • 连接名称:输入连接的名称。
    • Autonomous Database URL :输入要连接到的 Autonomous AI Database 的 URL。从 Autonomous AI Database 的 Web UI 复制整个 URL。例如,输入或复制以下链接 "https://<hostname>-<databasename>.adb.<region>.oraclecloudapps.com/" 以连接到数据库。
    • 方案名称:输入用于为 Autonomous Database 方案启用 IAM 登录的相同方案。
    • 选择连接类型: OCI IAM
    • 域 URL :从“域信息”选项卡输入域 URL
    • 选择 RBAC IAM 类型。
    • IAM 范围ssaddin/rbac



创建连接后,您可以与此域的其他用户共享该连接。