Une ressource WebClient passant par un proxy peut encore échouer avant son appel API si l'obtention du jeton utilise un autre connecteur. Pour le flux réactif client_credentials de Spring Security 6.5, reliez les trois pièces :

HttpClient route = HttpClient.create()
    .proxy(p -> p.type(ProxyProvider.Proxy.HTTP)
        .host("proxy.example").port(8080));
WebClient tokenHttp = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(route))
    .build();

var tokens = new WebClientReactiveClientCredentialsTokenResponseClient();
tokens.setWebClient(tokenHttp);

var provider = new ClientCredentialsReactiveOAuth2AuthorizedClientProvider();
provider.setAccessTokenResponseClient(tokens);

var manager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(
    registrations, authorizedClients);
manager.setAuthorizedClientProvider(provider);

tokens.setWebClient affecte le client HTTP du jeton ; provider.setAccessTokenResponseClient l'affecte au fournisseur de subvention ; manager.setAuthorizedClientProvider installe ce fournisseur. Utilisez ce gestionnaire dans le filtre OAuth réel ou dans le flux de travail authorized-client.

HttpClient et ProxyProvider sont des types Reactor Netty. WebClient et son connecteur sont des types Spring WebFlux. Fournissez le ReactiveClientRegistrationRepository existant comme registrations et le ReactiveOAuth2AuthorizedClientService comme authorizedClients.

Ce fournisseur gère client_credentials ; conservez une chaîne de fournisseurs adaptée si d'autres subventions sont nécessaires. L'exemple n'a pas de compte proxy : celui-ci relèverait du transport et non de l'ID/secret du client OAuth. Pour un point de terminaison de jeton public autorisé via un intermédiaire public, choisissez un hôte et un port dans la liste de proxys HTTP.

Configurez aussi le connecteur de la ressource protégée lorsque ces appels API ont besoin de la route. La réussite du jeton et celle de l'API sont deux résultats distincts.

Articles similaires