Spring Security 6.5: az OAuth engedélyezési kód cseréjének átvezetése proxyn
Adjon a Spring Security engedélyezési kódjához tartozó tokenválasz-kliensnek proxyképes RestClientet, miközben megtartja az OAuth-átalakítókat és a hibakezelőt.
A böngésző eléri az identitásszolgáltatót, majd a bejelentkezés meghiúsul, amikor az alkalmazás kicseréli a visszakapott engedélyezési kódot. Ez a csere az alkalmazásszerver kimenő kérése, saját HTTP-klienssel.
A Spring Security 6.5-ben elérhető RestClient-alapú API esetében lássa el az engedélyezési kód tokenválasz-kliensét proxyképes kérésgyárral:
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);
Az átalakító- és hibakezelő osztályok megőrzik a Spring Security dokumentált tokenkérési viselkedését. Egy általános RestClient, amely csak egy nem kapcsolódó JSON API-hoz van beállítva, nem egyenértékű helyettesítő.
Kösse be ugyanazt a tokenClientet a meglévő biztonsági konfigurációba:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Ezek konfigurációs töredékek egy olyan alkalmazáshoz, amely már rendelkezik kliensregisztrációval és SecurityFilterChainnel. Hitelesítés nélküli HTTP-proxyt választanak; a hitelesítő adatokat igénylő proxyhoz a választott átvitel megfelelő hitelesítési konfigurációja kell. Egy engedélyezett nyilvános útvonalon nyilvánosan elérhető HTTPS-tokenvégponthoz a HTTP-proxylistáról származó HTTP-bejegyzés kitöltheti ezt a fiók nélküli proxycímet.
Tartsa a proxy gazdagépét külön a portjától és URL-sémájától. Hagyja az identitásszolgáltató token-URI-ját célként. A példa nem helyettesíti a tanúsítvány-ellenőrzést.
A későbbi kéréseknek saját tulajdonellenőrzésre van szükségük. A UserInfo lekérése, a frissítési token cseréje, a client-credentials kedvezmények és a védett API-hívások más kliensobjektumokat használhatnak. Konfigurálja a megfelelő támogatott klienst, amikor ez a művelet is igényli az útvonalat. A Spring Security 6.5 reaktív client_credentials folyamatához külön konfigurálja a reaktív tokenklienst és annak kedvezmény-szolgáltatóját.
Az OAuth2RestTemplate-et és AccessTokenProvider-t használó régi példák a régebbi Spring Security OAuth projekthez tartoznak. A kód adaptálása előtt válassza ki a telepített alkalmazás által használt API-t; ne keverje ezeket az objektumokat ebbe a konfigurációba.