Spring Security 6.5: proxy OAuth-udvekslingen af autorisationskoden
Giv Spring Securitys klient til tokenrespons for autorisationskoden en proxybevidst RestClient, mens dens OAuth-konvertere og fejlhandler bevares.
Browseren når identitetsudbyderen, og derefter mislykkes login, når applikationen udveksler den returnerede autorisationskode. Den udveksling er en udgående anmodning fra applikationsserveren med sin egen HTTP-klient.
Til det RestClient-baserede API i Spring Security 6.5 skal du give klienten til tokenrespons for autorisationskoden en proxybevidst anmodningsfabrik:
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 fejlhandlerklasserne bevarer Spring Securitys dokumenterede adfærd for tokenanmodninger. En generisk RestClient, der kun er konfigureret til et urelateret JSON-API, er ikke en tilsvarende erstatning.
Forbind den samme tokenClient med den eksisterende sikkerhedskonfiguration:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Dette er konfigurationsfragmenter til en applikation, der allerede har sin klientregistrering og SecurityFilterChain. De vælger en HTTP-proxy uden godkendelse; en proxy, der kræver legitimationsoplysninger, har brug for den valgte transports tilsvarende godkendelseskonfiguration. Til et offentligt tilgængeligt HTTPS-tokenendepunkt på en tilladt offentlig rute kan en HTTP-post fra HTTP-proxylisten udfylde den proxyadresse uden konto.
Hold proxyværten adskilt fra dens port og URL-skema. Lad identitetsudbyderens token-URI være destinationen. Eksemplet erstatter ikke certifikatvalidering.
Senere anmodninger har brug for deres egen ejerskabskontrol. Hentning af UserInfo, udvekslinger af opdateringstokens, client-credentials-tildelinger og beskyttede API-kald kan bruge andre klientobjekter. Konfigurer den tilsvarende understøttede klient, når den handling også har brug for ruten. Til Spring Security 6.5's reaktive client_credentials-flow skal du konfigurere den reaktive tokenklient og dens tildelingsudbyder separat.
Ældre eksempler med OAuth2RestTemplate og AccessTokenProvider hører til det ældre Spring Security OAuth-projekt. Vælg det API, som den installerede applikation bruger, før du tilpasser kode; bland ikke disse objekter ind i denne konfiguration.