文章目录
- 第九章 REST 服务安全
- 为 `REST` 服务设置身份验证
- `REST` 应用程序和 `OAuth 2.0`
- 指定使用 `REST` 服务所需的权限
- 指定权限
- 使用 `SECURITYRESOURC` 参数
第九章 REST 服务安全
如果
REST
服务正在访问机密数据,应该对服务使用身份验证。如果需要为不同的用户提供不同级别的访问权限,还要指定端点所需的权限。
为 REST 服务设置身份验证
可以对
IRIS REST
服务使用以下任何形式的身份验证:
-
身份验证标头 — 这是HTTP
服务的推荐身份验证形式。REST
-
会话身份验证 — 其中用户名和密码在 URL 中的问号后面指定。Web
-
身份验证 - 请参阅以下小节。OAuth 2.0
REST 应用程序和 OAuth 2.0
要通过
OAuth 2.0
对
REST
应用程序进行身份验证,请执行以下所有操作:
- 将包含
应用程序的资源服务器配置为REST
资源服务器。OAuth 2.0
- 允许对
进行委派身份验证。%Service.CSP
- 确保将
应用程序(用于Web
应用程序)配置为使用委托身份验证。REST
- 在
命名空间中创建一个名为%SYS
的例程。 提供了一个示例例程ZAUTHENTICATE
,可以复制和修改它。此例程是 GitHub (https://github.com/intersystems/Samples-Security) 上 Samples-Security 示例的一部分。可以按照“下载用于 IRIS 的示例”中的说明下载整个示例,但在REST.ZAUTHENTICATE.mac
上打开例程并复制其内容可能更方便。GitHub
在例程中,修改
applicationName
的值并根据需要进行其他更改。
指定使用 REST 服务所需的权限
为了指定执行代码或访问数据所需的权限, 技术使用基于角色的访问控制 (
RBAC
)。
如果需要为不同的用户提供不同级别的访问权限,请执行以下操作来指定权限:
- 修改规范类以指定使用
服务或REST
服务中的特定端点所需的权限;然后重新编译。权限是与资源名称组合的权限(例如读取或写入)。REST
- 使用管理门户:
- 定义在规范类中引用的资源。
- 定义提供权限集的角色。例如,角色可以提供对端点的读取访问权限或对不同端点的写入访问权限。一个角色可以包含多组权限。
- 将用户置于其任务所需的所有角色中。
此外,可以使用
%CSP.REST
类的
SECURITYRESOURCE
参数来执行授权。
指定权限
可以为整个
REST
服务指定权限列表,也可以为每个端点指定权限列表。为此:
- 要指定访问服务所需的权限,请编辑规范类中的
块。对于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"
},
...
- 要指定访问特定端点所需的权限,请将
属性添加到定义该端点的操作对象,如下例所示: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"
],
...
- 编译规范类。此操作重新生成调度类。
使用 SECURITYRESOURC
参数
SECURITYRESOURC