specification - Swagger 2.0 donde declarar el esquema de autenticación básico
swagger description (3)
¿Cómo defino la autenticación básica utilizando las anotaciones de Swagger 2.0 y hacer que se muestre en la interfaz de usuario de Swagger?
En el recurso tengo:
@ApiOperation(value = "Return list of categories", response=Category.class, responseContainer="List", httpMethod="GET", authorizations = {@Authorization(value="basicAuth")})
public Response getCategories();
Miré aquí:
https://github.com/swagger-api/swagger-core/wiki/Annotations#authorization-authorizationscope
Y dice "Una vez que haya declarado y configurado qué esquemas de autorización admite en su API, puede usar estas anotaciones para observar qué esquema de autorización se requiere en un recurso o una operación específica". Pero no puedo encontrar nada de lo que se hable. Dónde declarar y configurar los esquemas de autorización.
Actualizar:
Encontré un código sobre cómo declarar el esquema, pero aún no veo ninguna información sobre el esquema de autenticación en la interfaz de usuario. No estoy seguro de lo que me estoy perdiendo
@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);
}
}
Al usar las anotaciones de Springfox 2.6, primero debe definir la autenticación Básica como uno de los esquemas de seguridad cuando configure el Docket en su configuración, de esta manera:
List<SecurityScheme> schemeList = new ArrayList<>();
schemeList.add(new BasicAuth("basicAuth"));
return new
Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo)
.securitySchemes(schemeList)
...
Luego, puede usar las anotaciones de Springfox en su servicio para configurar la Autenticación Básica para la operación para la que desea requerir autenticación:
@ApiOperation(value = "Return list of categories", response=Category.class, responseContainer="List", httpMethod="GET", authorizations = {@Authorization(value="basicAuth")})
public Response getCategories();
Puede usar la @SwaggerDefinition http://swagger.io/customizing-your-auto-generated-swagger-definitions-in-1-5-x/
o puede configurar el objeto swagger directamente, aquí hay un ejemplo http://www.programcreek.com/java-api-examples/index.php?source_dir=rakam-master/rakam/src/main/java/org/rakam/WebServiceRecipe.java
Yo también luché con esto. En mi caso utilicé el plugin swagger-maven. Para resolver esto agregué esto dentro del plugin de maven:
<securityDefinitions>
<securityDefinition>
<name>basicAuth</name>
<type>basic</type>
</securityDefinition>
</securityDefinitions>
Después de eso pude agregarlo a mi recurso de esta manera:
@Api(value = "My REST Interface", authorizations = {@Authorization(value="basicAuth")})
El json generado incluye el elemento de seguridad para cada punto final:
"security":[{
"basicAuth" : []
}]
Y la definición de seguridad:
"securityDefinitions" : {
"basicAuth" : {
"type" : "basic"
}
}
Espero que esto ayude a otros también.