Spring Security 6.5: proksiranje razmene OAuth autorizacionog koda
Dajte klijentu odgovora na token autorizacionog koda u Spring Security RestClient svestan proxyja, zadržavajući OAuth konvertere i rukovalac greškama.
Pregledač stiže do davaoca identiteta, a zatim prijava ne uspeva kada aplikacija razmeni vraćeni autorizacioni kod. Ta razmena je odlazni zahtev sa servera aplikacije, sa sopstvenim HTTP klijentom.
Za API zasnovan na RestClientu dostupan u Spring Security 6.5, dostavite fabriku zahteva svesnu proxyja klijentu odgovora na token autorizacionog koda:
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
factory.setConnectTimeout(5000);
factory.setReadTimeout(15000);
RestClient tokenHttp = RestClient.builder()
.requestFactory(factory)
.messageConverters(converters -> {
converters.clear();
converters.add(new FormHttpMessageConverter());
converters.add(new OAuth2AccessTokenResponseHttpMessageConverter());
})
.defaultStatusHandler(new OAuth2ErrorResponseErrorHandler())
.build();
RestClientAuthorizationCodeTokenResponseClient tokenClient =
new RestClientAuthorizationCodeTokenResponseClient();
tokenClient.setRestClient(tokenHttp);
Klase konvertera i rukovaoca greškama čuvaju dokumentovano ponašanje zahteva za token u Spring Security. Generički RestClient konfigurisan samo za nepovezani JSON API nije ekvivalentna zamena.
Povežite isti tokenClient sa postojećom bezbednosnom konfiguracijom:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Ovo su fragmenti konfiguracije za aplikaciju koja već ima registraciju klijenta i SecurityFilterChain. Oni biraju HTTP proxy bez autentifikacije; proxy koji zahteva akreditive treba odgovarajuću konfiguraciju autentifikacije izabranog transporta. Za javno dostupnu HTTPS krajnju tačku tokena na dozvoljenoj javnoj ruti, HTTP unos sa liste HTTP proxyja može popuniti tu adresu proxyja bez naloga.
Držite host proxyja odvojeno od njegovih portova i URL šeme. Ostavite URI tokena davaoca identiteta kao odredište. Primer ne zamenjuje proveru sertifikata.
Kasniji zahtevi trebaju sopstvenu proveru vlasništva. Dohvatanje UserInfo, razmene tokena za osvežavanje, dodele client-credentials i pozivi zaštićenog API-ja mogu koristiti druge klijentske objekte. Konfigurišite odgovarajući podržani klijent kada ta operacija takođe treba rutu. Za reaktivni tok client_credentials u Spring Security 6.5 konfigurišite reaktivni klijent tokena i njegovog davaoca dodela odvojeno.
Stari primeri sa OAuth2RestTemplate i AccessTokenProvider pripadaju starijem projektu Spring Security OAuth. Izaberite API koji koristi instalirana aplikacija pre prilagođavanja koda; ne mešajte te objekte u ovu konfiguraciju.