Для чего используется поле «scopes» объекта схемы безопасности swagger?

petstore_auth:
  type: oauth2
  authorizationUrl: http://swagger.io/api/oauth/dialog
  flow: implicit
  scopes:
    write:pets: modify pets in your account
    read:pets: read your pets

Это пример определения безопасности из спецификации Swagger. Для чего предназначены write:pets и read:pets? Это какие-то категории для путей?


person lfree    schedule 14.07.2016    source источник


Ответы (1)


write:pets и read:pets являются Oauth2 scopes и не связаны с OpenAPI (fka. Swagger) operations categorization.

Области действия Oauth2

Когда API защищен с помощью Oauth, области используются для предоставления различных прав/привилегий потребителю API. Области определяются именем (вы можете использовать все, что хотите).

Авторизация областей Oauth в SwaggerUI, который может действовать как потребитель API: введите здесь описание изображения< /а>

В этом случае этот защищенный API oauth2 предлагает 2 области действия:

  • write:pets: изменить питомцев в своей учетной записи
  • read:pets: читай своих питомцев

При описании API со спецификацией OpenAPI (fka. Swagger) вы можете определить эти области, как показано в вопросе.

Но только определение этих областей бесполезно, если вы не объявляете, какие операции покрываются этими областями. Это делается путем добавления этого к операции:

     security:
        - petstore_auth:
          - read:pets

В этом примере операция доступна потребителю API, только если ему разрешено использовать область действия read:pets. Обратите внимание, что одна операция может принадлежать нескольким областям oauth2, а также нескольким определениям безопасности.

Подробнее о безопасности в OpenAPI (fka. Swagger) можно прочитать здесь

Классификация операций OpenAPI (fka. Swagger)

Независимо от области действия OAuth2, если вам нужно классифицировать операции API, вы можете использовать tags:

      tags:
        - pets

Если добавить это к операции, она будет помещена в категорию pets. Одна операция может относиться к нескольким категориям.

Эти категории используются SwaggerUI для перегруппировки операций. На снимке экрана ниже мы видим 3 категории (домашнее животное, магазин и пользователь): введите здесь описание изображения Подробнее о категориях можно прочитать здесь:

Вот полный пример использования областей Oauth2 и категории

swagger: "2.0"
info:
  version: "1.0.0"
  title: Swagger Petstore

securityDefinitions:
  petstore_auth:
    type: oauth2
    authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
    flow: implicit
    scopes:
      write:pets: modify pets in your account
      read:pets: read your pets

paths:
  /pets/{petId}:
    parameters:
      - in: path
        name: petId
        description: ID of pet that needs to be fetched
        required: true
        type: integer
        format: int64
    get:
      tags:
        - pets
      summary: Find pet by ID
      responses:
        "404":
          description: Pet not found
        "200":
          description: A pet
          schema:
            $ref: "#/definitions/Pet"
      security:
        - petstore_auth:
          - read:pets
    delete:
      tags:
        - pets
      summary: Deletes a pet
      responses:
        "404":
          description: Pet not found
        "204":
          description: Pet deleted
      security:
        - petstore_auth:
          - write:pets

definitions:
  Pet:
    type: object
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
        example: doggie
person Arnaud Lauret    schedule 23.07.2016
comment
Большое спасибо, @Arnaud! Кстати, я уже собирался прочитать серию руководств по написанию спецификаций openapi-swagger! :) - person lfree; 28.07.2016
comment
@Arnaud Lauret Я добавил области, как вы упомянули. Но моя конечная точка Google разрешает доступ, даже если области не совпадают. Что я могу делать неправильно? - person user; 04.09.2020