手动配置基于角色的访问控件
您可以在 Oracle Cloud Infrastructure 中使用 JSON Web Token (JWT) 定制声明来配置 Role-Based Access Control (RBAC)。
为用户创建自定义属性
用户实体将其属性和其他信息存储为属性。例如,名字、姓氏、用户登录名、密码等。您可以在 Oracle Cloud Infrastructure 中创建定制属性。
- 单击汉堡菜单,然后转至身份和安全,然后选择域。在 "Name"(名称)下,单击 Default 域。
- 转到方案管理选项卡,然后选择用户属性。
- 单击添加属性并指定以下内容:
- 显示名称: ORDS RBAC
- 名称: rbac_ords
- 说明: ORDS 的基于角色的访问控制
- 数据类型: String Array(字符串数组)
您可以将其余字段保留为其默认状态。
单击添加。您已添加自定义属性。
- 通过在搜索字段中键入定制来搜索新添加的属性。您将在列表中查看 ORDS RBAC 属性。
单击编辑属性。
- 复制并记下 FQN (全限定名称)的值。
在此示例中, FQN 是 urn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords 。
分配定制角色
- 导航到: Identity → Domains → Default 。单击 User Management 选项卡,然后从显示的用户列表中选择您的用户名。
单击编辑用户。向下滚动到 Other Information(其他信息)字段,然后在 ORDS RBAC 下输入 SQL Developer,SODA Developer(SODA 开发人员)。
有关 ORDS 角色的更多信息,请参阅关于 Oracle REST Data Services 用户角色中的本章。
添加角色后,单击保存更改。
创建域集成应用程序
我们将在该域内开发一个集成应用程序,该应用程序将在登录时发出 JWT 令牌。
- 导航到: Identity → Domains → Default 。单击集成应用程序选项卡,然后选择添加应用程序。
- 单击机密应用程序,然后选择启动工作流。
- 在添加机密应用程序对话框中,指定以下字段:
- 名称:输入机密应用程序的名称。例如, Spreadsheet-Addin RBAC 。
- 描述:输入描述。例如, Integrated Application for the spreadsheet add-in role based access control 。
单击提交。
您将查看新添加的 Spreadsheet-Addin RBAC 应用程序页。
- 在 Spreadsheet-Addin RBAC 页面的 OAuth 配置选项卡中单击编辑 OAuth 配置。
- 在 "Resource Server Configuration"(资源服务器配置)下,选择 Configure this application as a resource server now 。
- 在配置需要 OAuth 保护的应用程序 API 中,选择 3600 作为访问令牌到期(秒)。
- 在主要受众字段中,输入 ssaddin/ 。
- 单击添加范围并添加 rbac 范围。
- 在客户机配置下,指定以下字段:
- 选择立即将此应用程序配置为客户端。
- 在允许的授权类型下选择隐式。
- 在重定向 URL 字段中输入以下值:
https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html - 在注销后 URL 字段中输入以下值:
https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html
单击提交。注意:
确保激活应用程序。
定义自定义索赔
要在 JWT 中包括用户角色,必须使用自定义声明将第一部分中建立的自定义属性映射到 JWT。
为了实现这一点,我们需要创建一个额外的临时集成应用程序,并通过它附加自定义声明。
创建身份域集成应用程序
- 导航到: Identity → Domains → Default 。
- 单击集成应用程序选项卡,然后选择添加应用程序。
- 单击机密应用程序,然后选择启动工作流。
- 输入应用程序的名称:身份域集成应用程序
- 输入说明:这是域集成应用程序。
单击提交。
- 在身份域集成应用程序页上,选择 OAuth 配置选项卡。
- 单击资源服务器配置上的编辑 OAuth 配置。在编辑 OAuth 配置对话框中,指定以下字段:
- 在 Client configuration(客户端配置)下,选择默认值 Configure this application as a client now 。
- 在授权下,选择客户端身份证明。将其余配置保留为其默认状态。
- 选择添加应用程序角色。
- 在添加应用程序角色对话框中,单击身份域管理员,然后选择添加。
- 添加应用程序角色后,单击提交。
- 激活应用程序。
为 JWT 创建新索赔
我们要求 CLIENT ID、CLIENT SECRET 和 DOMAIN URL 检索身份域管理员应用程序的新访问令牌。
我们有您在上一步中创建的域集成应用程序中的 CLIENT ID 和 CLIENT 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:123a1234e1234567aa12345a1abcdefg1Client Secret:idcscs-12a1a123-a123-1234-1234-e1a05aabc123Domain URL: https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443
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_ordscurl -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 登录
- 在“SQL Worksheet(SQL 工作表)”的“Navigator(导航器)”选项卡中,从“Schema(方案)”下拉列表中选择
ORDS_METADATA。 - 从“对象类型”下拉列表中选择
Packages。 - 在“搜索”字段中键入
ORDS_SECURITY。搜索函数检索以ORDS_SECURITY开头的所有条目。 - 展开
ORDS_SECURITY软件包。 - 右键单击
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 文件
-
单击“连接”窗格标题上的添加按钮以添加连接。这将打开“添加新连接”对话框。
- 在“添加新连接”对话框上指定以下字段:
- 连接名称:输入连接的名称。
- 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
创建连接后,您可以与此域的其他用户共享该连接。


















