Swagger Authentication using Api-Key

452 views
Skip to first unread message

Sumit Ranjan

unread,
Jul 19, 2017, 12:49:41 AM7/19/17
to Swagger
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
Reply all
Reply to author
Forward
0 new messages