第六章 IRIS 保护REST服务

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

本章假设您以前已经生成了REST服务类,如“创建和编辑REST服务”中所述。

6.1 为REST服务设置身份验证

您可以对InterSystems IRIS REST服务使用以下任何形式的身份验证:

  • HTTP身份验证头-这是REST服务的推荐身份验证形式。
  • Web会话身份验证-用户名和密码在URL中的问号后面指定。
  • OAuth 2.0身份验证-请参阅以下小节。

6.1.1 REST应用程序和OAuth 2.0

要通过OAuth 2.0验证REST应用程序,请执行以下所有操作:

  • 将包含REST应用程序的资源服务器配置为OAuth 2.0资源服务器。

  • 允许%Service.CSP的委派身份验证。

  • 确保web应用程序(针对REST应用程序)配置为使用委派身份验证。

  • 在%SYS命名空间中创建名为ZAUTHENTICATE的例程。InterSystems提供了一个示例例程REST.ZAUTHENTICATE.mac,您可以复制和修改它。此例程是GitHub上Samples Security示例的一部分(https://github.com/intersystems/Samples-Security)。您可以按照“下载用于InterSystems IRIS的示例”中的描述下载整个示例,但只需在GitHub上打开例程并复制其内容可能会更方便。

    在例程中,修改applicationName的值,并根据需要进行其他更改。

另请参阅使用OAuth 2.0和OpenID Connect中的“使用InterSystems IRIS Web应用程序作为OAuth 2.0Client”一章中的“可选地为Web客户端定义委派身份验证”。

重要:

如果对HealthShare®使用身份验证,则必须使用InterSystems提供的ZAUTHENTICATE例程,并且不能自己编写。

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

为了指定执行代码或访问数据所需的权限,InterSystems技术使用基于角色的访问控制(RBAC)。有关详细信息,请参阅授权:控制用户访问。

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

  • 修改规范类以指定使用REST服务或REST服务中特定端点所需的权限;然后重新编译。特权是一种权限(如读或写),与资源的名称相结合。

    参见小节。

  • 使用管理门户:

    • 定义在规范类中引用的资源。
    • 定义提供权限集的角色。例如,角色可以提供对端点的读访问或对不同端点的写访问。一个角色可以包含多组权限。
    • 将用户置于其任务所需的所有角色中。

此外,您可以使用%CSP.RESTSECURITYRESOURCE参数来执行授权。

6.2.1 指定权限

您可以为整个REST服务指定特权列表,也可以为每个端点指定特权列表。为此:

  1. 要指定访问服务所需的权限,请编辑规范类中的OpenAPIXData块。对于信息对象,添加一个名为x-ISC_RequiredResource的新属性,其值是以逗号分隔的已定义资源及其访问模式(资源:模式)的列表,访问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"
        },
    ...
    
  2. 要指定访问特定端点所需的权限,请将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"
            ],
            ...
    
    
  3. 编译规范类。此操作重新生成调度类。

6.2.2 使用SECURITYRESOURCE参数

作为一个附加的授权工具,%CSP.REST的子类分派类具有SECURITYRESOURCE参数。SECURITYRESOURCE的值要么是资源及其权限,要么只是资源(在这种情况下,相关权限为Use)。系统检查用户是否对与SECURITYRESOURCE关联的资源具有所需的权限。

注:

如果分派类为SECURITYRESOURCE指定了一个值,并且CSPSystem用户没有足够的特权,那么这可能会导致登录尝试失败时出现意外的HTTP错误代码。为了防止这种情况发生,InterSystems建议您将指定资源的权限授予CSPSystem用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值