I am facing an issue while implementing API-KEY security to swagger.
I have made all these changes to implement Api-Key security.
In SwaggerConfig class -
---------------------------------
@Bean
public Docket parkingReservationServiceApi() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage(REST_PACKAGE_PATH))
.paths(PathSelectors.regex("/.*"))
.build().pathMapping("/")
.directModelSubstitute(LocalDate.class, String.class)
.genericModelSubstitutes(ResponseEntity.class)
.alternateTypeRules(newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(ResponseEntity.class, WildcardType.class)), typeResolver.resolve(WildcardType.class)))
.useDefaultResponseMessages(true)
.globalResponseMessage(RequestMethod.GET,
newArrayList(new ResponseMessageBuilder()
.code(500)
.message("500 message")
.responseModel(new ModelRef("Error"))
.build()))
.apiInfo(getApiInfo())
.securitySchemes(newArrayList(apiKey()))
/*.securityContexts(newArrayList(securityContext()))*/
.protocols(protocols())
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
private ApiKey apiKey() {
return new ApiKey("abcdef12345", "api_key", "header");
}
/* private SecurityContext securityContext() {
return SecurityContext.builder().securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("/c2creservation.*")).build();
}*/
List<SecurityReference> defaultAuth() {
/* AuthorizationScope authorizationScope = new AuthorizationScope(
"global", "accessEverything");*/
AuthorizationScope[] authorizationScopes = new AuthorizationScope[0];
// authorizationScopes[0] = authorizationScope;
return newArrayList(new SecurityReference("abcdef12345", authorizationScopes));
}
private List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = Arrays.asList(SecurityContext.builder().forPaths(PathSelectors.regex("/.*")).securityReferences(securityReferences()).build());
return securityContexts;
}
private List<? extends SecurityScheme> securitySchemes() {
List<SecurityScheme> authorizationTypes = Arrays.asList(new ApiKey("api_key", "abcdef12345", "header"));
return authorizationTypes;
}
private Set<String> protocols() {
Set<String> protocols = new HashSet<>();
protocols.add("http");
protocols.add("https");
return protocols;
}
IN Controller class:
---------------------------
@RestController
@Validated
@Api(value = "Search Parking Spaces", description = "Endpint for C2C Parking Reservation")
@SwaggerDefinition(securityDefinition = @SecurityDefinition(
apiKeyAuthDefintions = {
@ApiKeyAuthDefinition(key = "api_key", name = "abcdef12345", in = ApiKeyLocation.HEADER)
}
)
)
@RequestMapping(value = "/c2creservation/v1")
public class ABCController extends BaseController
{
}
In index.html
-----------------
function addApiKeyAuthorization() {
var key = encodeURIComponent($('#input_apiKey')[0].value);
if (key && key.trim() != "") {
var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("api_key", key, "header");
alert("apiKeyAuth:::"+apiKeyAuth);
alert("key:::"+key);
window.swaggerUi.api.clientAuthorizations.add(key, apiKeyAuth);
alert("added key " + key);
}
}
$('#input_apiKey').change(addApiKeyAuthorization);
My maven dependency is :
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.15</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
It would be appreciable if you will help me on this.
Thanks,
Sumit