Spring Security 6.5: rute OAuth-autorisasjonskodeutvekslingen via en proxy
Gi tokenresponsklienten for autorisasjonskoden i Spring Security en proxybevisst RestClient, mens OAuth-konverterne og feilbehandleren beholdes.
Nettleseren når identitetsleverandøren, deretter mislykkes påloggingen når applikasjonen utveksler den returnerte autorisasjonskoden. Denne utvekslingen er en utgående forespørsel fra applikasjonsserveren, med sin egen HTTP-klient.
For det RestClient-baserte API-et som er tilgjengelig i Spring Security 6.5, gi tokenresponsklienten for autorisasjonskoden en proxybevisst forespørselsfabrikk:
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 feilbehandlerklassene bevarer den dokumenterte tokenforespørselsatferden til Spring Security. En generisk RestClient som bare er konfigurert for et urelatert JSON-API, er ikke en likeverdig erstatning.
Koble den samme tokenClient til den eksisterende sikkerhetskonfigurasjonen:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Dette er konfigurasjonsbiter for en applikasjon som allerede har klientregistreringen og SecurityFilterChain. De velger en HTTP-proxy uten autentisering; en proxy som krever påloggingsinformasjon, trenger den valgte transportens tilsvarende autentiseringskonfigurasjon. For et offentlig tilgjengelig HTTPS-tokenendepunkt på en tillatt offentlig rute kan en HTTP-oppføring fra HTTP-proxylisten fylle ut den proxyadressen uten konto.
Hold proxyverten atskilt fra porten og URL-skjemaet. La token-URI-en til identitetsleverandøren være destinasjonen. Eksempelet erstatter ikke sertifikatvalidering.
Senere forespørsler trenger sin egen eierskapskontroll. Henting av UserInfo, utveksling av oppdateringstoken, client-credentials-tildelinger og beskyttede API-kall kan bruke andre klientobjekter. Konfigurer den tilsvarende støttede klienten når den operasjonen også trenger ruten. For den reaktive client_credentials-flyten i Spring Security 6.5 konfigurerer du den reaktive tokenklienten og tildelingsleverandøren separat.
Eldre eksempler med OAuth2RestTemplate og AccessTokenProvider tilhører det eldre Spring Security OAuth-prosjektet. Velg API-et som den installerte applikasjonen bruker før du tilpasser koden; ikke bland disse objektene inn i denne konfigurasjonen.