Swagger 2.0, где объявить Basic Auth Schema
Как определить базовую аутентификацию с помощью аннотаций Swagger 2.0 и отобразить ее в пользовательском интерфейсе swagger.
В ресурсе у меня есть:
@ApiOperation(value = "Return list of categories", response=Category.class, responseContainer="List", httpMethod="GET", authorizations = {@Authorization(value="basicAuth")})
public Response getCategories();
Я посмотрел здесь:
https://github.com/swagger-api/swagger-core/wiki/Annotations#authorization-authorizationscope
И он говорит: "После того, как вы объявили и настроили какие схемы авторизации, которые вы поддерживаете в своем API, вы можете использовать эти аннотации, чтобы отметить, какая схема авторизации требуется для ресурса или конкретной операции" Но я ничего не могу найти что говорит о том, где объявлять и настраивать схемы авторизации.
Update:
Я нашел код о том, как объявить схему, но я до сих пор не вижу никакой информации о схеме аутентификации в пользовательском интерфейсе. Я не уверен, что мне не хватает
@SwaggerDefinition
public class MyApiDefinition implements ReaderListener {
public static final String BASIC_AUTH_SCHEME = "basicAuth";
@Override
public void beforeScan(Reader reader, Swagger swagger) {
}
@Override
public void afterScan(Reader reader, Swagger swagger) {
BasicAuthDefinition basicAuthDefinition = new BasicAuthDefinition();
swagger.addSecurityDefinition(BASIC_AUTH_SCHEME, basicAuthDefinition);
}
}
Ответы
Ответ 1
Используя аннотации Springfox 2.6, вы должны сначала определить базовую проверку подлинности как одну из схем безопасности при настройке Docket в своей конфигурации, например:
List<SecurityScheme> schemeList = new ArrayList<>();
schemeList.add(new BasicAuth("basicAuth"));
return new
Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo)
.securitySchemes(schemeList)
...
Затем вы можете использовать аннотации Springfox в своей службе, чтобы установить Basic Auth для операции, для которой требуется проверка подлинности:
@ApiOperation(value = "Return list of categories", response=Category.class, responseContainer="List", httpMethod="GET", authorizations = {@Authorization(value="basicAuth")})
public Response getCategories();
Ответ 2
Я тоже боролся с этим. В моем случае я использовал плагин swagger-maven. Чтобы решить эту проблему, я добавил ее в плагин maven:
<securityDefinitions>
<securityDefinition>
<name>basicAuth</name>
<type>basic</type>
</securityDefinition>
</securityDefinitions>
После этого я смог добавить его на свой ресурс следующим образом:
@Api(value = "My REST Interface", authorizations = {@Authorization(value="basicAuth")})
Сгенерированный json включил элемент безопасности для каждой конечной точки:
"security":[{
"basicAuth" : []
}]
И определение безопасности:
"securityDefinitions" : {
"basicAuth" : {
"type" : "basic"
}
}
Я надеюсь, что это тоже поможет другим.
Ответ 3
Вы можете использовать @SwaggerDefinition
http://swagger.io/customizing-your-auto-generated-swagger-definitions-in-1-5-x/
или вы можете настроить объект swagger напрямую, здесь пример
http://www.programcreek.com/java-api-examples/index.php?source_dir=rakam-master/rakam/src/main/java/org/rakam/WebServiceRecipe.java