Spring Security 6.5: výmena autorizačného kódu OAuth cez proxy
Dajte klientovi odpovede s tokenom autorizačného kódu v Spring Security RestClient s podporou proxy a zachovajte jeho OAuth konvertory a obsluhu chýb.
Prehliadač sa dostane k poskytovateľovi identity, potom sa prihlásenie nepodarí, keď aplikácia vymení vrátený autorizačný kód. Táto výmena je odchádzajúca požiadavka z aplikačného servera s vlastným HTTP klientom.
Pre API založené na RestClient dostupné v Spring Security 6.5 poskytnite klientovi odpovede s tokenom autorizačného kódu továreň požiadaviek s podporou proxy:
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);
Triedy konvertora a obsluhy chýb zachovávajú dokumentované správanie tokenovej požiadavky Spring Security. Všeobecný RestClient nakonfigurovaný len pre nesúvisiace JSON API nie je rovnocennou náhradou.
Zapojte ten istý tokenClient do existujúcej bezpečnostnej konfigurácie:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Toto sú fragmenty konfigurácie pre aplikáciu, ktorá už má registráciu klienta a SecurityFilterChain. Volia HTTP proxy bez overovania; proxy vyžadujúce prihlasovacie údaje potrebuje zodpovedajúcu konfiguráciu overovania zvoleného transportu. Pre verejne dostupný koncový bod tokenu HTTPS na povolenej verejnej trase môže HTTP záznam zo zoznamu HTTP proxy vyplniť túto adresu proxy bez účtu.
Udržujte hostiteľa proxy oddelene od jeho portu a schémy URL. Ponechajte URI tokenu poskytovateľa identity ako cieľ. Príklad nenahrádza overovanie certifikátov.
Neskoršie požiadavky potrebujú vlastnú kontrolu vlastníctva. Načítanie UserInfo, výmeny obnovovacieho tokenu, granty client-credentials a volania chráneného API môžu používať iné klientske objekty. Nakonfigurujte zodpovedajúceho podporovaného klienta, keď táto operácia tiež potrebuje trasu. Pre reaktívny tok client_credentials v Spring Security 6.5 nakonfigurujte reaktívneho klienta tokenov a jeho poskytovateľa grantov samostatne.
Staršie príklady používajúce OAuth2RestTemplate a AccessTokenProvider patria k staršiemu projektu Spring Security OAuth. Pred úpravou kódu vyberte API, ktoré používa nainštalovaná aplikácia; nemiešajte tieto objekty do tejto konfigurácie.