Я подготовил определение 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.И это работает, однако:
- Мне просто интересно, использую ли я здесь правильные инструменты / библиотеки?
- Действительно ли swagger-tools ничего не делает с безопасностью, определенной в файле Swagger?
- Полностью отсутствует автоматическая обработка / проверка области - мне нужно вручную проверить в функции oAuth2, содержит ли предоставленный токен (в качестве носителя) области, требуемые определением API Swagger.Это правильный способ сделать это или, может быть, есть какая-то скрытая опция или что-то для автоматической проверки областей?