Почему чванство игнорирует мою аутентификацию? - PullRequest
4 голосов
/ 27 марта 2019

Я пытаюсь защитить интерфейс swagger с помощью OpenId Connect.

Я могу войти в систему с помощью OIDC, и swagger показывает меня как авторизованный:

enter image description here но когда я пытаюсь это сделать, аутентификация игнорируется, и появляется окно входа в систему:

![enter image description here

В моем классе, который extends SpringBootServletInitializer у меня есть:

   @Bean
   @ConditionalOnProperty("security.oauth2.client.clientId") 
    public SecurityScheme securityScheme(Environment environment, OAuth2ClientProperties clientProperties) {
        String authorizationUri = environment.getRequiredProperty("security.oauth2.client.user-authorization-uri");
        String accessTokenUri = environment.getRequiredProperty("security.oauth2.client.access-token-uri");

        LoginEndpoint loginEndpoint = new LoginEndpoint(authorizationUri);
        TokenRequestEndpoint tokenRequestEndpoint =
                new TokenRequestEndpoint(authorizationUri, clientProperties.getClientId(), clientProperties.getClientSecret());
        TokenEndpoint tokenEndpoint = new TokenEndpoint(accessTokenUri, "auth_code");
        GrantType grantType = new AuthorizationCodeGrant(tokenRequestEndpoint, tokenEndpoint);
        AuthorizationScope authorizationScope = new AuthorizationScope(authorizationScopeGlobal, authorizationScopeGlobal);
        return new OAuthBuilder()
                .name(securitySchemaOAuth2)
                .grantTypes(Arrays.asList(grantType))
                .scopes(Arrays.asList(authorizationScope))
                .build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope(authorizationScopeGlobal, authorizationScopeGlobalDesc);
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference(securitySchemaOAuth2, authorizationScopes));
    }

    @Bean
    SecurityConfiguration security(OAuth2ClientProperties clientProperties) {
        return new SecurityConfiguration(
                clientProperties.getClientId(),
                clientProperties.getClientSecret(),
                securitySchemaOAuth2,
                "test-app",
                "apiKey",
                ApiKeyVehicle.HEADER, 
                "api_key",
                " " /*scope separator*/);
    }

    @Bean
    public SecurityContext securityContext() {
        return SecurityContext.builder().securityReferences(defaultAuth()).forPaths(PathSelectors.regex("/v1/.*")).build();
    }

и класс с:

 @ApiModel(value = "Template", description = "Template of REST APIs")
@RestController
@RequestMapping("/v1")
public class TemplateServiceImplementation {

...

@ApiOperation(httpMethod = "GET", value = "Call Get method",
        notes = "See Get method")
@RequestMapping(method = RequestMethod.GET, value = "/calltemplate/{param}/", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Structure> callGet(@PathVariable("param") String param, HttpServletRequest hreq) {

    MultiValueMap<String, String> mapParams = new LinkedMultiValueMap<String, String>();
    mapParams.add("param", param);
    Structure structure = restTemplate.getForObject(callGetEndpoint, Structure.class, mapParams);

    ResponseEntity<Structure> thisresponse = new ResponseEntity<Structure>(structure, HttpStatus.OK);
    return thisresponse;
}

Извините за весь код. Итак, как мне заставить GET использовать мою аутентификацию OIDC?

Когда я отменяю логин, curl это: curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMy lots more encrypted text' 'http://localhost:8080/v1/calltemplate/%7B%20%20%20%22id%22%3A%20%22string%22%2C%20%20%20%22name%22%3A%20%22string%22%2C%20%20%20%22path%22%3A%20%22string%22%2C%20%20%20%22version%22%3A%20%22string%22%20%7D/' URL запроса: http://localhost:8080/v1/calltemplate/%7B%20%20%20%22id%22%3A%20%22string%22%2C%20%20%20%22name%22%3A%20%22string%22%2C%20%20%20%22path%22%3A%20%22string%22%2C%20%20%20%22version%22%3A%20%22string%22%20%7D/

и другие переменные ответа:

enter image description here

РЕДАКТИРОВАТЬ Забыл ко мне мой WebSecurityConfig:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", 
            "/swagger-resources/**", "/configuration/**", "/swagger-ui.html"
            , "/webjars/**", "/csrf", "/");
}

UPDATE Выход сети: enter image description here

...