天天看点

第九章 REST 服务安全

文章目录

  • ​​第九章 REST 服务安全​​
  • ​​为 `REST` 服务设置身份验证​​
  • ​​`REST` 应用程序和 `OAuth 2.0`​​
  • ​​指定使用 `REST` 服务所需的权限​​
  • ​​指定权限​​
  • ​​使用 `SECURITYRESOURC` 参数​​

第九章 REST 服务安全

如果 ​

​REST​

​ 服务正在访问机密数据,应该对服务使用身份验证。如果需要为不同的用户提供不同级别的访问权限,还要指定端点所需的权限。

为 REST 服务设置身份验证

可以对 ​

​IRIS REST​

​ 服务使用以下任何形式的身份验证:

  • ​HTTP​

    ​​ 身份验证标头 — 这是​

    ​REST​

    ​ 服务的推荐身份验证形式。
  • ​Web​

    ​ 会话身份验证 — 其中用户名和密码在 URL 中的问号后面指定。
  • ​OAuth 2.0​

    ​ 身份验证 - 请参阅以下小节。

REST 应用程序和 OAuth 2.0

要通过 ​

​OAuth 2.0​

​​ 对 ​

​REST​

​ 应用程序进行身份验证,请执行以下所有操作:

  • 将包含​

    ​REST​

    ​​ 应用程序的资源服务器配置为​

    ​OAuth 2.0​

    ​ 资源服务器。
  • 允许对​

    ​%Service.CSP​

    ​ 进行委派身份验证。
  • 确保将​

    ​Web​

    ​​ 应用程序(用于​

    ​REST​

    ​ 应用程序)配置为使用委托身份验证。
  • 在​

    ​%SYS​

    ​​ 命名空间中创建一个名为​

    ​ZAUTHENTICATE​

    ​​ 的例程。 提供了一个示例例程​

    ​REST.ZAUTHENTICATE.mac​

    ​​,可以复制和修改它。此例程是 GitHub (https://github.com/intersystems/Samples-Security) 上 Samples-Security 示例的一部分。可以按照“下载用于 IRIS 的示例”中的说明下载整个示例,但在​

    ​GitHub​

    ​ 上打开例程并复制其内容可能更方便。

在例程中,修改 ​

​applicationName​

​ 的值并根据需要进行其他更改。

指定使用 REST 服务所需的权限

为了指定执行代码或访问数据所需的权限, 技术使用基于角色的访问控制 (​

​RBAC​

​)。

如果需要为不同的用户提供不同级别的访问权限,请执行以下操作来指定权限:

  • 修改规范类以指定使用​

    ​REST​

    ​​ 服务或​

    ​REST​

    ​ 服务中的特定端点所需的权限;然后重新编译。权限是与资源名称组合的权限(例如读取或写入)。
  • 使用管理门户:
  • 定义在规范类中引用的资源。
  • 定义提供权限集的角色。例如,角色可以提供对端点的读取访问权限或对不同端点的写入访问权限。一个角色可以包含多组权限。
  • 将用户置于其任务所需的所有角色中。

此外,可以使用 ​

​%CSP.REST​

​​ 类的 ​

​SECURITYRESOURCE​

​ 参数来执行授权。

指定权限

可以为整个 ​

​REST​

​ 服务指定权限列表,也可以为每个端点指定权限列表。为此:

  1. 要指定访问服务所需的权限,请编辑规范类中的​

    ​OpenAPI XData​

    ​​ 块。对于​

    ​info​

    ​​ 对象,添加一个名为​

    ​x-ISC_RequiredResource​

    ​​ 的新属性,其值是以逗号分隔的已定义资源列表及其访问模式 (​

    ​resource:mode​

    ​​),这是访问​

    ​REST​

    ​ 服务的任何端点所必需的。

下面显示了一个示例:

"swagger":"2.0",
  "info":{
    "version":"1.0.0",
    "title":"Swagger Petstore",
    "description":"A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
    "termsOfService":"http://swagger.io/terms/",
    "x-ISC_RequiredResource":["resource1:read","resource2:read","resource3:read"],
    "contact":{
      "name":"Swagger API Team"
    },
...      
  1. 要指定访问特定端点所需的权限,请将​

    ​x-ISC_RequiredResource​

    ​ 属性添加到定义该端点的操作对象,如下例所示:
"post":{
        "description":"Creates a new pet in the store.  Duplicates are allowed",
        "operationId":"addPet",
        "x-ISC_RequiredResource":["resource1:read","resource2:read","resource3:read"],
        "produces":[
          "application/json"
        ],
        ...      
  1. 编译规范类。此操作重新生成调度类。

使用 ​

​SECURITYRESOURC​

​ 参数

继续阅读