Spring Security 6.5: rute OAuth-autorisasjonskodeutvekslinga gjennom ein proxy
Gje tokenresponsklienten for autorisasjonskoden i Spring Security ein proxybevisst RestClient, medan OAuth-konverterarane og feilhandteringa blir haldne.
Nettlesaren når identitetsleverandøren, og deretter mislukkast innlogginga når applikasjonen utvekslar den returnerte autorisasjonskoden. Den utvekslinga er ein utgåande førespurnad frå applikasjonsserveren, med sin eigen HTTP-klient.
For det RestClient-baserte API-et som er tilgjengeleg i Spring Security 6.5, gje tokenresponsklienten for autorisasjonskoden ein proxybevisst førespurnadsfabrikk:
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);
Konverter- og feilhandteringsklassane held på den dokumenterte tokenførespurnadsåtferda til Spring Security. Ein generisk RestClient som berre er konfigurert for eit urelatert JSON-API, er ikkje ein likeverdig erstatning.
Kopla den same tokenClient til den eksisterande tryggleikskonfigurasjonen:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Dette er konfigurasjonsbitar for ein applikasjon som allereie har klientregistreringa og SecurityFilterChain. Dei vel ein HTTP-proxy utan autentisering; ein proxy som krev legitimasjon, treng den valde transporten si tilsvarande autentiseringskonfigurasjon. For eit offentleg tilgjengeleg HTTPS-tokenendepunkt på ei tillaten offentleg rute kan ein HTTP-oppføring frå HTTP-proxylista fylla ut den proxyadressa utan konto.
Hald proxyverten skild frå porten og URL-skjemaet. Lat token-URI-en til identitetsleverandøren vere destinasjonen. Dømet erstattar ikkje sertifikatvalidering.
Seinare førespurnader treng si eiga eigarskapskontroll. Henting av UserInfo, utvekslingar av oppdateringstoken, client-credentials-tildelingar og beskytta API-kall kan bruke andre klientobjekt. Konfigurer den tilsvarande støtta klienten når den operasjonen òg treng ruta. For den reaktive client_credentials-flyten i Spring Security 6.5 konfigurerer du den reaktive tokenklienten og tildelingsleverandøren hans separat.
Eldre døme med OAuth2RestTemplate og AccessTokenProvider høyrer til det eldre Spring Security OAuth-prosjektet. Vel API-et som den installerte applikasjonen brukar før du tilpassar kode; ikkje bland desse objekta inn i denne konfigurasjonen.