Spring Security 6.5: rute OAuth-autorisasjonskodeutvekslingen gjennom en proxy
Gi Spring Securitys tokenresponsklient for autorisasjonskoden en proxybevisst RestClient, mens OAuth-konverterne og feilhåndteringen beholdes.
Nettleseren når identitetsleverandøren, og deretter mislykkes innloggingen når applikasjonen utveksler den returnerte autorisasjonskoden. Den 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 feilhåndteringsklassene bevarer Spring Securitys dokumenterte tokenforespørselsatferd. 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 legitimasjon, 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 identitetsleverandørens token-URI være destinasjonen. Eksempelet erstatter ikke sertifikatvalidering.
Senere forespørsler trenger sin egen eierskapskontroll. Henting av UserInfo, utvekslinger 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 Spring Security 6.5s reaktive client_credentials-flyt konfigurerer du den reaktive tokenklienten og dens tildelingsleverandør 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 kode; ikke bland disse objektene inn i denne konfigurasjonen.