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 Bean または明示的なリソースサーバー設定で組み込みます。変更していない有効なデコーダーの隣に作成しても、鍵の取得方法は変わりません。信頼できる JWKS URL が公開されており、公開された中間プロキシが許可されている場合、HTTP プロキシ一覧からアカウント不要の転送用ホストとポートの候補を選べます。

示されているバリデーターは既定の時刻検証と issuer 検証を維持します。デコーダーを置き換える際は、audience の要件とアプリケーション固有の追加バリデーターをすべて残してください。

既知の鍵 URI を使うと、その場所を探すための discovery を省略できます。別のコンポーネントがまだ discovery やトークン取得を行う場合は、そのクライアントの経路を別途設定してください。

ここではリソースサーバーでのリアクティブ JWT 検証を扱います。Servlet リソースサーバー、OAuth2 ログイン、業務 API クライアントには別の接続点があります。失敗した鍵 URL と段階を調査記録に残してください。

関連記事