var transport = reactor.netty.http.client.HttpClient.create()
    .proxy(spec -> spec
        .type(reactor.netty.transport.ProxyProvider.Proxy.HTTP)
        .host("proxy.example")
        .port(8080));
var webClient = org.springframework.web.reactive.function.client.WebClient
    .builder()
    .clientConnector(new org.springframework.http.client.reactive
        .ReactorClientHttpConnector(transport))
    .build();

var decoder = org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder
    .withJwkSetUri(jwkSetUri)
    .webClient(webClient)
    .build();
decoder.setJwtValidator(org.springframework.security.oauth2.jwt.JwtValidators
    .createDefaultWithIssuer(issuer));

신뢰할 수 있는 jwkSetUri/issuer 값을 사용하고 이 디코더를 실제 ReactiveJwtDecoder 빈이나 명시적인 리소스 서버 구성으로 설치하세요. 변경하지 않은 활성 디코더 옆에 만들어도 키 조회 방식은 달라지지 않습니다. 신뢰하는 JWKS URL이 공개되어 있고 공개 중개자가 허용된다면 HTTP 프록시 목록에서 계정이 필요 없는 전송용 호스트와 포트 후보를 고를 수 있습니다.

표시된 검증기는 기본 시간 검사와 issuer 검증을 유지합니다. 디코더를 교체할 때 audience 요구 사항과 애플리케이션의 모든 추가 검증기를 그대로 두세요.

알려진 키 URI를 쓰면 해당 위치를 찾기 위한 검색을 건너뜁니다. 다른 구성 요소가 여전히 검색이나 토큰 획득을 수행한다면 그 클라이언트의 경로를 별도로 구성하세요.

여기서는 리소스 서버의 리액티브 JWT 검증을 다룹니다. Servlet 리소스 서버, OAuth2 로그인, 비즈니스 API 클라이언트에는 다른 연결 지점이 있습니다. 실패한 키 URL과 단계를 조사 기록에 남기세요.

관련 글