В реактивном сервисе Spring Webflux у меня есть конечные точки, настроенные для защиты сервером ресурсов OAuth2. Когда я впервые запускаю сервер, он корректно проверяет токены Bearer, но примерно через 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 AD https://sts.windows.net/{{tenantId}}/
, и я убедился, что URL строки совпадают, а не внутренние адреса. Что может быть причиной, и как я могу проверить токены с действующими эмитентами через первые 30 секунд? Спасибо.
Для справки, вот мой SecurityWebFilterChain
:
@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