首页 > 解决方案 > OpenAPI 将路径限制为“管理员”用户

问题描述

在 OpenAPI 中,如何将给定的操作(例如)限制为GET /users具有特定角色(例如admin)的用户?

例如,用户列表应该只能由用户访问admin

paths:
  /users:
    get:
      # TODO: restrict access to users with 'admin' role
      summary: Get list of all users
      security:
        - BearerAuth: []
      operationId: getUsers      
      responses:
        200:
          description: successful operation      
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'

标签: openapi

解决方案


Bearer Authorization 不支持 OpenAPI 定义的访问范围。你有几个选择:

使用描述

使用 adescription向您的定义的读者解释这些端点需要属于管理员用户的身份验证令牌。这是最简单的解决方案,尽管这不允许工具从您的 OpenAPI 规范中自动强制执行此标准,因此您需要在自己的代码中手动控制它。

get:
  description: Get list of all users. Limited to admin users.

使用扩展

编写一个扩展来正式描述您的身份验证令牌所需的标准。OpenAPI 允许使用额外的属性来定义不适合一般情况的特定于您的实现的属性和行为。您可以编写工具和脚本来处理此属性,以强制执行您认为合适的行为。

get:
  x-authRoles: ['admin']

使用 OAuth 2.0

使用 OAuth 2.0 或其他设计支持访问范围的安全方案。您可能会发现这增加了额外的安全优势,因为围绕 OAuth 的所有工具都已经期望访问范围,因此您可能会更轻松地解决这个特定问题,因为您不必滚动自己的实现。

get:
  security: 
    - oAuthSample: 
      - admin

推荐阅读