我为在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承载令牌处理一起使用。 但是,这可行: