带有 fusionauth 自定义租户的 Spring 云网关

问题描述 投票:0回答:1

我不确定这是否是 Spring Boot 的一个错误,问题是我在 fusionauth 中创建了一个发行者“anyissuer”的租户,然后我使用 spring-boot- 配置了带有 spring boot 3.2.1 的 spring cloud gateway starter-oauth2-resource-server 具有:

spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:9011/.well-known/openid-configuration/018d642c-e707-7349-95c7-ead15f625746
spring.security.oauth2.resourceserver.jwt.audiences[0]=018d642c-a7e8-75b1-96af-1ea04c3b0faa

这样做,当我尝试访问某些安全网址时,出现错误:配置中提供的发行者“anyissuer”与请求的发行者“http://localhost:9011/.well-known/openid”不匹配-配置/018d6028-e976-7aef-8d35-d65386e6b448"

但是在 http://localhost:9011/.well-known/openid-configuration/018d6028-e976-7aef-8d35-d65386e6b448 中,响应中的发行者是“anyissuer”。

我在 org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerJwkConfiguration 类中发现了这个方法

@Bean
        @ConditionalOnProperty(
            name = {"spring.security.oauth2.resourceserver.jwt.jwk-set-uri"}
        )
        ReactiveJwtDecoder jwtDecoder(ObjectProvider<JwkSetUriReactiveJwtDecoderBuilderCustomizer> customizers) {
            NimbusReactiveJwtDecoder.JwkSetUriReactiveJwtDecoderBuilder builder = NimbusReactiveJwtDecoder.withJwkSetUri(this.properties.getJwkSetUri()).jwsAlgorithms(this::jwsAlgorithms);
            customizers.orderedStream().forEach((customizer) -> {
                customizer.customize(builder);
            });
            NimbusReactiveJwtDecoder nimbusReactiveJwtDecoder = builder.build();
            String issuerUri = this.properties.getIssuerUri();
            OAuth2TokenValidator<Jwt> defaultValidator = issuerUri != null ? JwtValidators.createDefaultWithIssuer(issuerUri) : JwtValidators.createDefault();
            nimbusReactiveJwtDecoder.setJwtValidator(this.getValidators(defaultValidator));
            return nimbusReactiveJwtDecoder;
        } 

它正在使用 spring.security.oauth2.resourceserver.jwt.issuer-uri 属性的值而不是 http://localhost:9011/.well-known/openid- 响应中的发行者值创建发行者验证器配置/018d642c-e707-7349-95c7-ead15f625746

综上所述,有没有办法使用 Spring Boot 3.2.1 配置 oauth2 资源服务器以从租户获取 openid-configuration (已解决指定 http://localhost:9011/.well-known/openid-configuration/ spring.security.oauth2.resourceserver.jwt.issuer-uri 属性中的 018d642c-e707-7349-95c7-ead15f625746 )并使 jwtDecorder 与发行者正常工作?

我使此“工作”的唯一方法是将我的租户发行者更改为http://localhost:9011/.well-known/openid-configuration/018d642c-e707-7349-95c7-ead15f625746

spring-boot oauth-2.0 fusionauth
1个回答
0
投票

spring.security.oauth2.resourceserver.jwt.issuer-uri
属性的值不是指向OpenID配置的URI,它是访问令牌中颁发者声明(
iss
)的值,并且该声明应包含一个URI(与您找到的相同)在 OpenID 配置中)。

此属性的主要功能是在 JWT 解码器中配置颁发者验证器。如果无法从颁发者处猜出 OpenID 配置(就像其中包含此 UUID),那么您必须配置

jwk-set-uri
属性(使用您在 JWK-set 端点的 OpenID conf 中找到的值),并且您可以将
issuer-uri
留空(没有发行者验证器),或者使用 exactly 设置访问令牌中的
iss
声明。

© www.soinside.com 2019 - 2024. All rights reserved.