Spring Security 6.5: de OAuth-autorisaasjekoade-útwikseling fia in proxy
Jou Spring Security syn klant foar token-antwurd fan 'e autorisaasjekoade in proxy-bewuste RestClient, wylst syn OAuth-konverters en flerkmelder bewarre bliuwe.
De browser berikt de identiteitsjouwer, en dan mislearret de oanmelding as de applikaasje de weromjûne autorisaasjekoade útwikselet. Dy útwikseling is in útgeande oanfraach fan de applikaasjeserver, mei syn eigen HTTP-klant.
Foar de RestClient-basearre API dy't beskikber is yn Spring Security 6.5, jou de klant foar token-antwurd fan 'e autorisaasjekoade in proxy-bewuste oanfraachfabryk:
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);
De konverter- en flerkmelderklassen bewarje it dokumintearre token-oanfraachgedrach fan Spring Security. In generike RestClient dy't allinnich foar in net-relatearre JSON-API konfigurearre is, is gjin lykweardige ferfanging.
Keppel deselde tokenClient oan 'e besteande befeiligingskonfiguraasje:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Dit binne konfiguraasjefragminten foar in applikaasje dy't al syn klantregistraasje en SecurityFilterChain hat. Se kieze in HTTP-proxy sûnder autentikaasje; in proxy dy't bewiisstikken freget, hat de byhearrende autentikaasjekonfiguraasje fan it keazen transport nedich. Foar in publyk berikber HTTPS-token-einpunt op in tastiene publike rûte kin in HTTP-ynstjoering út 'e HTTP-proxylist dat proxy-adres sûnder akkount folje.
Hâld de proxy-host skieden fan syn poarte en URL-skema. Lit de token-URI fan de identiteitsjouwer it bestimming wêze. It foarbyld ferfangt gjin sertifikaatfalidaasje.
Lettere oanfragen hawwe har eigen eigendomskontrôle nedich. UserInfo-ophalen, ferfarskingstoken-útwikselings, client-credentials-tawizings en befeilige API-oproppen kinne oare klantobjekten brûke. Konfigurearje de byhearrende stipe klant as dy operaasje ek de rûte nedich hat. Foar de reaktive client_credentials-stream fan Spring Security 6.5 konfigurearje de reaktive tokenklant en syn tawizingsjouwer apart.
Legere foarbylden mei OAuth2RestTemplate en AccessTokenProvider hearre by it âldere Spring Security OAuth-projekt. Kies de API dy't de ynstallearre applikaasje brûkt foardat jo koade oanpasse; mingje dy objekten net yn dizze konfiguraasje.