保护 RESTful Web 服务

定义角色、权限和 OAuth 客户端,以确保访问 RESTful Web 服务需要验证和授权。

要保护 RESTful Web 服务,您需要:

  • 创建职责

  • 创建权限,选择用于保护的角色和模块或资源

要使用 OAUTH2 工作流启用对受保护 RESTful 服务的访问,请使用为保护 RESTful 服务而创建的角色和权限创建 OAuth 客户端。

以下各节提供了有关如何创建角色、权限和 OAuth 客户端的信息:

Managing Roles

您可以在“角色”页中为 RESTful 服务创建、编辑和删除角色。

要导航到“角色”页,请从“REST 概览”页,单击“对象”中的角色,或者从标题中的菜单中,选择安全性,然后选择角色

上下文菜单中可用的操作包括:

创建角色

创建具有特定名称的角色。创建角色后,您可以将其与权限关联。

  1. 在“角色”页中,单击创建角色
  2. 在 "Role Name"(角色名称)字段中,输入要创建的角色的名称。

    显示代码:选择此选项可查看“创建角色”滑块等效的 PL/SQL 代码。您可以在工作表中复制并执行此 PL/SQL 代码,以执行与在“创建角色”滑块中单击创建时相同的操作。

  3. 单击创建

    新的已分配角色将显示在“角色”页面上。

编辑角色

本节介绍如何编辑角色。

  1. 在“角色”页的特定角色中,单击操作 “上下文”菜单,然后选择编辑
  2. 输入所需的更改,然后单击保存

    有关字段的说明,请参阅创建角色

删除角色

本节介绍如何删除角色。

  1. 在“角色”页的特定角色中,单击操作 “上下文”菜单,然后选择删除

    系统将提示您确认。

  2. 单击可删除。

查看分配的权限

本节介绍如何查看与角色关联的权限。

在“角色”页的特定角色中,单击操作 “上下文”菜单,然后选择详细信息。将显示分配给该角色的权限。

管理权限

可以在“Privileges(权限)”页中创建、编辑和删除 RESTful 服务的权限。

权限定义一组角色,其中至少一个角色必须由经过验证的用户拥有才能访问受权限保护的 RESTful 服务。

要导航到“权限”页,请从“REST 概览”页,单击“对象”中的权限,或者从标题中的菜单中,选择安全性,然后选择权限

下图显示了默认情况下在卡视图中显示的权限属性。

上下文菜单中可用的操作包括:

创建权限

本节介绍如何创建权限。

  1. 在“权限”页中,单击创建权限
  2. 输入以下字段。带星号 (*) 标记的字段是必填字段:
    • 标签:以易于理解的方式输入权限的名称。
    • 名称:为权限输入一个唯一名称。
    • 说明:输入权限用途的简要说明。
    • 备注:输入备注。
    • 角色:输入分配给该权限的一个或多个角色。
    • 受保护模块:选择要保护的模块。
    • 受保护资源:使用 "Protect Resources"(保护资源)选项卡来基于 URI 模式应用安全性,而不是使用 "Protected Modules"(受保护的模块)。

    显示代码:选择此选项可查看等效于“创建权限”滑块的 PL/SQL 代码。您可以在工作表中复制并执行此 PL/SQL 代码,以执行与在“创建权限”滑块中单击创建时相同的操作。

  3. 单击创建

    新权限将显示在“权限”页上。

编辑权限

本节介绍如何编辑权限。

  1. 在“权限”页中,对于特定权限,单击操作 “上下文”菜单,然后选择编辑
  2. 进行所需的更改,然后单击保存

    有关字段的说明,请参阅创建权限

删除权限

本节介绍如何删除特权。

  1. 在“权限”页中,对于特定权限,单击操作 “上下文”菜单,然后选择删除
  2. 系统会提示您确认。单击

管理 OAuth 客户端

使用基于 OAuth 2.0 的验证,您可以确保 RESTful Web 服务仅由特定用户或客户端访问。

OAuth 2.0 是一种标准 Internet 协议,用于定义流以提供对 RESTful API 的有条件和有限访问权限。有关更多信息,请参见 OAuth-Based Authentication

您可以在“OAuth 客户端”页面中创建、编辑和删除 OAuth 客户端。

要导航到“OAuth 客户端”页,请从“REST 概览”页,单击“对象”中的客户端,或者从标题中的菜单中,选择安全,然后选择 OAuth 客户端

下图显示了默认情况下在卡视图中显示的 OAuth 客户端属性。

要创建 OAuth 客户端,请参阅创建 OAuth 客户端

上下文菜单中可用的操作包括:

创建 OAuth 客户端

创建 OAuth 客户端并授予所需的角色和权限。

  1. 在“OAuth 客户端”页中,选择创建 OAuth 客户端
  2. 输入以下字段。带星号 (*) 标记的字段是必填字段:

    客户机定义选项卡

    • 授予类型:选择授权授予类型。选项包括 Client_Cred、Auth Code 或 Implicit。

      有关这些授权类型的更多信息,请参见《Oracle REST Data Services Developer's Guide 》中的 OAuth Flows

    • 名称:客户机的名称。
    • 说明:客户机的用途说明。
    • 重定向 URI :输入客户端控制的 URI,将向其发送包含 OAuth 访问标记或错误的重定向。
    • 支持 URI :输入最终用户可以与客户机联系以获得支持的 URI。示例:http:// www.myclientdomain.com/support/
    • Support Email(支持电子邮件):输入最终用户可以与客户端联系以获取支持的电子邮件。
    • 徽标:以 JPG、BMP 或 SVG 文件格式上载徽标。确保标识的大小小于 100 KB。
    • 角色:选择要授予的角色。
    • 允许的源:添加 URL 前缀列表。
    • 特权:选择客户机要访问的特权。

    显示代码:选择此选项可查看“创建 OAuth 客户端”面板等效的 PL/SQL 代码。您可以在工作表中复制并执行此 PL/SQL 代码,以执行与在“创建 OAuth 客户端”面板中单击创建时相同的操作。

  3. 单击创建

    注册的 OAuth 客户端将显示在“OAuth 客户端”页上。

    此时将显示客户端密钥的预览。密钥仅适用于客户端身份证明和 OAuth 代码授予类型。复制密钥值,因为这是显示该值的唯一实例。如果忘记了客户端密钥,则可以使用 "Rotate Secret" 操作对其进行更改。请参阅管理密钥

    客户端 ID 值表示 OAuth 客户端的密钥身份证明。单击显示/隐藏 "Show"(显示)/"Hide"(隐藏)图标 可查看值。

    使用 REST 客户端或 cURL 命令行工具测试受保护的 REST 服务端点。

编辑 OAuth 客户端

此部分介绍如何编辑 OAuth 客户端。

  1. 在 OAuth 客户端页面中,对于特定客户端,单击操作 “上下文”菜单,然后选择编辑
  2. 编辑必填字段,然后单击保存

    有关字段的说明,请参阅创建 OAuth 客户端

删除 OAuth 客户端

本节介绍如何删除 OAuth 客户端。

  1. 在“OAuth 客户机”页的特定客户机上,单击操作 “上下文”菜单,然后选择删除
  2. 系统将提示您确认。单击

导出 OAuth 客户端

本节介绍如何导出 OAuth 客户端。

  1. 在 OAuth 客户端页面中,对于特定客户端,单击操作 “上下文”菜单,然后选择导出
  2. 在 OAuth 客户端面板中,单击复制图标或下载以复制或下载 OAuth 客户端信息。

管理密钥

为 OAuth 客户端生成客户端密钥后,可以在需要时轮换或撤销该密钥。特定 OAuth 客户端的上下文菜单中提供了 "Rotate"(轮换)和 "Revoke"(撤消)选项。

注意:

随着 OAUTH 和 OAUTH_ADMIN PL/SQL 程序包的弃用(请参见 ORDS_SECURITY PL/SQL Package Reference ),OAUTH 客户端密钥创建过程将更改客户端身份证明和验证代码授予类型。

对于已使用非加密密钥创建的 OAuth 客户端,卡上会显示标签 Legacy

轮换客户端密钥

删除现有密钥并创建新密钥。这在您无法记住现有客户端密钥值时非常有用。

  • 如果 OAuth 客户端存在客户端密钥,请单击轮换以删除现有密钥并生成新的客户端密钥。

  • 如果客户端密钥已撤消且未分配任何密钥值,请单击注册为 OAuth 客户端生成客户端密钥。

撤消客户端密钥

删除现有客户机密钥。

选择撤消会话可删除所有现有客户机会话。

示例

本节提供了一些有关创建具有不同授权类型的 OAuth 客户端的示例。

使用客户端身份证明授予类型创建 OAuth 客户端

本节介绍如何使用客户端身份证明授权类型创建 OAuth 客户端。

示例:使用 POST 处理程序插入记录中为创建的模块“示例”创建 OAuth 客户端。RESTful 服务的端点为 http://xyz.us.comp.com:1234/ords/pdbdba/example/emp/。

先决条件

创建名为 HR 管理员的角色。请参见 Creating a Role

创建名为 Example.HR 的权限。请参见 Creating a Privilege

  1. 在“OAuth 客户端”页中,单击创建 OAuth 客户端
  2. 输入以下字段:
    • 在 "Grant type"(授予类型)字段中,选择 CLIENT_CRED
    • 输入 OAuth 客户端的名称、说明、重定向 URI、支持 URI 和支持电子邮件。

    • 在“Roles(角色)”选项卡中,添加创建的角色 (HR Admin)。

    • 在“Privileges(权限)”选项卡中,添加创建的权限 (Example.HR)。

    • 单击创建

    新的 OAuth 客户端卡将显示在“OAuth 客户端”页面上。

  3. 使用 cURL,测试没有 OAuth 凭据的服务端点。
    curl --location --request POST --header "Content-Type: application/json" 
    --data '{"DEPTNO": 55, "DEPTNAME": "Sales", "DEPTLOC": "Australia" }' 
    'http://xyz.us.comp.com:1234/ords/pdbdba/example/emp/'

    您会看到错误。

  4. 使用 OAuth 身份证明测试端点:
    1. 要获取访问令牌,请从 OAuth 客户端卡的上下文菜单中选择获取 Bearer 令牌

      此时将显示“OAuth 标记”对话框。使用 Copy to Clipboard “copy to clipboard(复制到剪贴板)”图标 复制令牌。

    2. 在 cURL 中,使用以下语句中的 bearer 访问令牌请求资源:

      curl -H "Content-Type: application/json" -H "Authorization: Bearer AMccwlnt99gm9kxDs_w1DA" --location --request POST --data 
      '{"DEPTNO": 55, "DEPTNAME": "Sales", "DEPTLOC": "Australia"}' 'http://xyz.us.comp.com:1234/ords/pdbdba/example/emp/'

    输出显示如下:

    {"deptno":55,"dname":"Sales","loc":"Australia","links":[{"rel":"collection",
    "href":"http://xyz.us.comp.com:1234/ords/pdbdba/example/emp/"}]}
  5. 在“SQL”页面中,可以使用以下语句验证已插入到 DEPT 表中的新记录:
    SELECT * FROM DEPT;

使用授权代码授予类型创建 OAuth 客户端

本节介绍如何使用验证代码授权类型创建 OAuth 客户端。

  1. 在“OAuth 客户端”页中,单击创建 OAuth 客户端
  2. 输入以下字段:
    • 授权类型字段中,选择授权代码
    • 为 OAuth 客户端输入 Name(名称)Description(说明)Redirect URI(重定向 URI)Support URISupport Email(支持电子邮件)

    • 角色选项卡中,添加相关角色。

    • Privileges(权限)选项卡中,添加相关权限。

    • 单击创建

    新的 OAuth 客户端卡将显示在“OAuth 客户端”页面上。

  3. 在 OAuth 客户端卡中,单击操作图标,然后选择授权详细信息
    此时将显示唯一值和授权 URI。
  4. 在“授权 URI”字段中,单击在新选项卡中打开图标。此时将显示一个新窗口,其中包含未授权错误消息以及“登录”链接。
  5. 单击登录并再次输入登录凭据。
  6. 系统会提示您批准访问受保护 URI 的请求。单击批准
    审批请求通知