• 第九章 REST 服务安全


    第九章 REST 服务安全

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

    REST 服务设置身份验证

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

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

    REST 应用程序和 OAuth 2.0

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

    • 将包含 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 编译规范类。此操作重新生成调度类。

    使用 SECURITYRESOURC 参数

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

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

  • 相关阅读:
    MySQL MVCC你了解吗
    【控制台】报错:Uncaught ReferenceError: process is not defined
    hive和spark-sql中 日期和时间相关函数 测试对比
    “RunningEventsDuration“ app Tech Support(URL)
    CPU 100%排查及常见案例
    JavaWeb-JSTL标签库
    R3LIVE代码详解(三)
    Servlet
    LDAP服务器如何重启
    第二十九章 目标检测中的测试模型评价指标(车道线感知)
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/126026931