Java Spring security oauth2在30秒后未通过颁发者验证

Java Spring security oauth2在30秒后未通过颁发者验证,java,spring-security,oauth-2.0,azure-active-directory,spring-webflux,Java,Spring Security,Oauth 2.0,Azure Active Directory,Spring Webflux,在反应式SpringWebFlux服务中,我将端点配置为受OAuth2资源服务器保护。当我第一次启动服务器时,它会正确验证承载令牌,但大约30秒后,完全相同的请求开始失败,出现以下错误: error="invalid_token" error_description="This iss claim is not equal to the configured issuer" error_uri="https://tools.ietf.org/html/rfc6750#section-3.1"

在反应式SpringWebFlux服务中,我将端点配置为受OAuth2资源服务器保护。当我第一次启动服务器时,它会正确验证承载令牌,但大约30秒后,完全相同的请求开始失败,出现以下错误:

error="invalid_token"
error_description="This iss claim is not equal to the configured issuer"
error_uri="https://tools.ietf.org/html/rfc6750#section-3.1"
我已经验证了令牌是有效的,并且
iss
声明似乎与
spring.security.oauth2.resourceserver.jwt.issuer uri中配置的内容相同。如果配置不正确,那么我将不会收到任何有效的请求

仔细检查后,我发现错误源于
URL
iss
声明和预期URL的比较,因为
InetAddress.getAddress()
在前30秒匹配,但随后不匹配。这是使用Azure广告提供商端点
https://sts.windows.net/{{tenantId}}/
我已经验证了URL字符串是否匹配,而不是内部地址。这可能是什么原因造成的?在最初的30秒之后,我如何使用有效的发行者验证令牌?谢谢

以下是我的
安全WebFilterChain
,仅供参考:

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    return http
            .csrf().disable()
            .authorizeExchange().anyExchange().authenticated()
            .and().oauth2ResourceServer().jwt().and()
            .and().build();
}
Gradle实现包括:

org.springframework.boot:spring-boot-starter-security:2.1.0.RC1
org.springframework.boot:spring-boot-starter-webflux:2.1.0.RC1
org.springframework.security:spring-security-oauth2-resource-server:5.1.1.RELEASE
org.springframework.security:spring-security-oauth2-jose:5.1.1.RELEASE

看起来这是在spring security中作为问题输入的,并在中解决。目前计划在5.1.2.RELEASE或5.2.0.M1中解决该问题


提交的解决方案将URL更改为字符串,这样除了删除阻止DNS查找调用外,还可以使相等性检查更加可靠。

我可以通过编写自定义
ReactiveJwtDecoder来解决此问题,但对于我所期望的基本功能来说,这似乎有点过分了。我花了一个星期的时间在这上面。这个答案需要投票1000次。