Есть ли лучший способ реализовать безопасность OAuth в API Swagger-Tools? - PullRequest
0 голосов
/ 29 декабря 2018

Я подготовил определение Swagger 2.0 для моего API, реализованного в файле node.js / connect.Я добавил определения безопасности:

securityDefinitions:
  BasicAuth:
    type: basic
  OAuth2:
    type: oauth2
    flow: accessCode
    authorizationUrl: http://localhost:9080/auth/realms/master/protocol/openid-connect/auth
    tokenUrl: http://localhost:9080/auth/realms/master/protocol/openid-connect/token
    scopes:
      scope1: my scope 1
      scope2: my scope 2

и API:

  /myAPI:
    post:
      [...]
      security:
        - BasicAuth: []
        - OAuth2: [scope1]

Таким образом, API защищен либо базовой HTTP-аутентификацией, либо OAuth2 (на самом деле токеном-носителем), требуя область действия «scope1»,Теперь реализация.Я использую инструменты swagger для генерации моей заглушки API:

java -jar swagger-codegen-cli.jar генерировать -l nodejs-сервер -i my.yaml -o out

НасколькоЯ знаю, что сгенерированный код swagger-tools никак не влияет на безопасность, поэтому я добавил для этого специальный код:

[...]
let secoptions = {
  'BasicAuth': function( req, securityDefinition, scopes, callback) {
    basicAuth( req, callback);
  },
  'OAuth2': function( req, securityDefinition, scopes, callback) {
    oAuth2( req, scopes, callback);
  }
}
app.use( middleware.swaggerSecurity( secoptions));
[...other swagger-tools generated init code...]

Я использую passport-http BasicStrategy для обработки basicAuth.Я использую стратегию passport-http-bearer с openid-client для обработки токенов канала oAuth2.И это работает, однако:

  1. Мне просто интересно, использую ли я здесь правильные инструменты / библиотеки?
  2. Действительно ли swagger-tools ничего не делает с безопасностью, определенной в файле Swagger?
  3. Полностью отсутствует автоматическая обработка / проверка области - мне нужно вручную проверить в функции oAuth2, содержит ли предоставленный токен (в качестве носителя) области, требуемые определением API Swagger.Это правильный способ сделать это или, может быть, есть какая-то скрытая опция или что-то для автоматической проверки областей?
...