Spring Security 5.2 - как настроить NimbusJWTDecoder, используемый OAuth2ResourceServer? - PullRequest
0 голосов
/ 15 января 2020

У меня есть поставщик openid (openam), работающий локально. Я использую самозаверяющий сертификат, а URL-адрес jwks: @ https://localhost: 8443 / openam / oauth2 / connect /

Из-за того, что ssl-сертификат самоподписан, я получаю исключение SSLHandshake, когда токен oid c декодируется. я попытался использовать пользовательский шаблон отдыха, создав пользовательский JwtDecoder (как предложено в https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2resourceserver -jwt-decoder-dsl )

@Bean
public JwtDecoder jwtDecoder() {
NimbusJwtDecoder.withJwkSetUri("https://localhost:8443/openam/oauth2/connect").restOperations(myCustomRestTemplateThatAllowsSelfSignedCerts()).build();
}

Но этот декодер, похоже, не используемый. OidcIdTokenDecoderFactory используется для создания декодера. Этот класс, похоже, не позволяет нам передавать пользовательский jwtDecoder ..

Почему oauthResourceServer (). Jwt (). Decoder (customDecoder ()) не работает? Как я могу заставить декодер работать с jwks uri, который является веб-сайтом с самозаверяющим сертификатом?

Один из вариантов, о котором я думаю, - это добавить самоподписанный сертификат в папку cacerts моего jdk. .

1 Ответ

0 голосов
/ 15 января 2020

OAuth2LoginAuthenticationFilter вызывает OidcAuthorizationCodeAuthenticationProvider для аутентификации OpenID. Чтобы изменить JwtDecoder, который он использует, у вас должен быть JwtDecoderFactory бин.

Например, у вас может быть что-то вроде:

@Bean
public JwtDecoderFactory<ClientRegistration> customJwtDecoderFactory() {
    return new CustomJwtDecoderFactory();
}

static class CustomJwtDecoderFactory implements JwtDecoderFactory<ClientRegistration> {
    public JwtDecoder createDecoder(ClientRegistration reg) {
        //...

        return new CustomJwtDecoder();
    }
}

Надеюсь, это ответит хотя бы на часть ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...