Spring Reactive OAuth2: запыты токена client_credentials праз проксі
Для client_credentials у Spring Security 6.5 падключыце WebClient токена праз правайдэр да таго мэнэджара authorized-client, які рэальна выкарыстоўваецца.
Рэсурс WebClient, які ідзе праз проксі, можа ўсё яшчэ пацярпець няўдачу да выкліку API, калі атрыманне токена выкарыстоўвае іншы канэктэр. Для рэактыўнага патоку client_credentials у Spring Security 6.5 злучыце ўсе тры часткі:
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 прызначае HTTP-кліент токена; provider.setAccessTokenResponseClient прызначае яго правайдэру гранта; manager.setAuthorizedClientProvider усталёўвае гэты правайдэр. Выкарыстоўвайце гэты мэнэджар у рэальным фільтры OAuth або ў працэсе authorized-client.
HttpClient і ProxyProvider — тыпы Reactor Netty. WebClient і яго канэктэр — тыпы Spring WebFlux. Падайце існуючы ReactiveClientRegistrationRepository як registrations, а ReactiveOAuth2AuthorizedClientService як authorizedClients.
Гэты правайдэр апрацоўвае client_credentials; захавайце адпаведны ланцуг правайдэраў, калі патрэбны іншыя гранты. У прыкладзе няма ўліковага запісу проксі — ён належаў бы да транспарту, а не да OAuth client ID/secret. Для публічнай канцавой кропкі токена, дазволенай праз публічны пасярэднік, выбірайце хост і порт з спіса HTTP-проксі.
Наладзьце таксама канэктэр абароненага рэсурсу, калі гэтым выклікам API патрэбны маршрут. Поспех токена і поспех API — асобныя вынікі.