在运行时为Oauth2资源服务器设置jwk-Set-uri



我有一个spring启动应用程序,它在spring Security配置中配置为oauth2ResourceServer。

此配置需要application.properties文件中的以下条目:

spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://localhost:8888/auth/realms/devrealm/protocol/openid-connect/certs

以便Spring Security可以验证JWT签名。

实际的实现工作得很好,但是,我很难编写测试。对于我的测试,我使用了一个在docker容器中运行的测试Keycloft实例,该实例由使用TestContainers的相关测试启动。由于测试密钥斗篷的端口一直在变化,我无法提前设置jwk-set-uri。只有在密钥斗篷容器启动后才能设置实际的jwk-set-uri。

所以问题是:如何在运行时设置或更改spring.security.oauth2.resourceserver.jwt.jwk-set-uri属性?

jwk-set-uri可以在运行时在WebSecurityConfig中进行配置。这优先于任何配置属性。

@EnableWebSecurity
public class DirectlyConfiguredJwkSetUri {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2
.jwt(jwt -> jwt
.jwkSetUri("https://idp.example.com/.well-known/jwks.json")
)
);
return http.build();
}
}

来源:https://docs.spring.io/spring-security/reference/5.6.0-RC1/reactive/oauth2/resource-server.html#webflux-oauth2资源服务器jwt jwkseturi dsl

最新更新