весенняя загрузка OAuth-сервера ресурсов JWT AudienceValidator 401 сообщение пустое - PullRequest
1 голос
/ 24 марта 2020

Я использую сервер ресурсов Spring Boot OAuth (JOSE) для проверки JWT из Auth0. Поток работает нормально, за исключением случаев, когда я проверяю утверждение аудитории от JWT, в случае сбоя возвращается статус ответа 401, но тело сообщения пусто.

Я настроил исключение для отправки сообщения, и оно работает нормально использовать authenticationEntryPoint и accessDeniedHandler, но эти обработки не были инициированы для OAuth2TokenValidator.

Я просто хочу получить 401 и мое настроенное тело сообщения для 401 при возникновении ошибки проверки аудитории.

Вот код, который я использовал:

public static class AudienceValidator implements OAuth2TokenValidator<Jwt> {
    private Logger logger = LoggerFactory.getLogger(AudienceValidator.class);
    private final String audience;
    OAuth2Error error = new OAuth2Error("invalid_token", "The required audience is missing", null);
    public AudienceValidator(String audience) {
        this.audience = audience;
    }    
    public OAuth2TokenValidatorResult validate(Jwt jwt) {
        logger.debug("validating audience: " + jwt.getAudience());
        if (jwt.getAudience().contains(audience)) {
            logger.debug("audience success");
            return OAuth2TokenValidatorResult.success();
        } else {
            logger.debug("invalid audience");
            return OAuth2TokenValidatorResult.failure(error);
        }
    }
}

@Override
protected void configure(HttpSecurity http) throws Exception {  
        http
        .cors().and()
            .oauth2ResourceServer(oauth2 -> oauth2
                    .jwt(jwt -> jwt
                        .jwtAuthenticationConverter(grantedAuthoritiesExtractor())
                    )
                );
        logger.debug("authenticatedOnly:"+authenticatedOnly);
        if (authenticatedOnly) http.authorizeRequests().anyRequest().authenticated();
        else http.authorizeRequests().anyRequest().permitAll();

       http
       .exceptionHandling()
        .authenticationEntryPoint((request, response, e) -> {
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
            response.setContentType("application/json");
            response.getWriter().write("{\"status\":401,\"error\":\"You are not authenticated.\",\"message\":\"\"}");
        })
        .accessDeniedHandler((request, response, e) -> {
            response.setStatus(HttpStatus.FORBIDDEN.value());
            response.setContentType("application/json");
            response.getWriter().write("{\"status\":403,\"error\":\"You are not authorized.\",\"message\":\"\"}");
        })
        ;
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...