有没有更好的方法在swagger-tools API中实现OAuth安全?

时间:2018-12-28 22:45:17

标签: node.js oauth swagger swagger-tools

我为在node.js / connect上实现的API准备了Swagger 2.0定义。我添加了安全性定义:

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-tools生成我的API存根:

java -jar swagger-codegen-cli.jar生成-l nodejs-server -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...]

我将护照-http BasicStrategy用于basicAuth处理。 我将带有openid-client的passport-http-bearer策略与oAuth2承载令牌处理一起使用。 但是,这可行:

  1. 我只是想知道我是否在这里使用正确的工具/库?
  2. swagger-tools真的对Swagger文件中定义的安全性没有任何作用吗?
  3. 完全没有自动范围处理/验证功能-如果提供的令牌(作为承载者)包含API Swagger定义所需的范围,则我必须手动签入oAuth2函数。 是这样做的正确方法,还是有一些隐藏的选项或某些东西可以自动验证范围?

0 个答案:

没有答案