2

我为在 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 由 Basic HTTP Auth 或 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...]

我使用 passport-http BasicStrategy 进行基本身份验证处理。我使用带有 openid-client 的 passport-http-bearer 策略来处理 oAuth2 不记名令牌。然而,这很有效:

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

0 回答 0