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