Spring Security 5.2 --如何自定义OAuth2 ResourceServer使用的NimbusJWTDecoder?

jecbmhm3  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(158)

我有一个本地运行的OpenID提供程序(openam)。我使用的是自签名证书,jwks URL是@ https://localhost:8443/openam/oauth2/connect/
由于SSL证书是自签名的,当OIDC令牌被解码时,我得到SSLHandshake异常。我尝试使用自定义REST模板,创建自定义JwtDecoder(如www.example.com所建议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一起工作?
我正在考虑的一个选择是将自签名证书添加到jdk的cacerts文件夹中。

eit6fx6z

eit6fx6z1#

OAuth2LoginAuthenticationFilter正在调用OidcAuthorizationCodeAuthenticationProvider进行OpenID身份验证。要更改它使用的JwtDecoder,您应该有一个JwtDecoderFactory bean。
例如,您可能有类似的内容:

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

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

        return new CustomJwtDecoder();
    }
}

字符串
希望这至少回答了你的部分问题。

相关问题