【问题标题】:Set jwk-set-uri for Oauth2 resource server at runtime在运行时为 Oauth2 资源服务器设置 jwk-set-uri
【发布时间】:2022-01-31 10:51:49
【问题描述】:

我有一个 Spring Boot 应用程序,它在 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 容器中运行的测试 Keycloak 实例,由使用 TestContainers 的相关测试启动。由于测试密钥斗篷的端口一直在变化,我无法提前设置jwk-set-uri。实际的 jwk-set-uri 只能在 keycloak 容器启动后设置。

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

【问题讨论】:

    标签: spring-boot spring-security-oauth2


    【解决方案1】:

    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-oauth2resourceserver-jwt-jwkseturi-dsl

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 2022-06-24
      • 2019-06-09
      • 2017-10-06
      • 2016-01-18
      • 2017-09-13
      • 2019-02-22
      • 2017-03-25
      • 2013-12-21
      相关资源
      最近更新 更多