Spring Security 6.5: ipasa ang palitan ng OAuth authorization code sa pamamagitan ng proxy
Bigyan ang kliyente ng token response ng authorization code ng Spring Security ng RestClient na may kamalayan sa proxy, habang pinapanatili ang mga converter ng OAuth at error handler nito.
Naabot ng browser ang identity provider, pagkatapos ay nabigo ang pag-login kapag ipinagpapalit ng application ang ibinalik na authorization code. Ang palitang iyon ay papalabas na kahilingan mula sa application server, na may sariling HTTP client.
Para sa API na batay sa RestClient na available sa Spring Security 6.5, bigyan ang kliyente ng token response ng authorization code ng pabrika ng kahilingan na may kamalayan sa proxy:
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);
Pinapanatili ng mga klase ng converter at error handler ang dokumentadong pag-uugali ng token request ng Spring Security. Ang generic na RestClient na naka-configure lamang para sa isang walang kaugnayang JSON API ay hindi katumbas na kapalit.
Ikonekta ang parehong tokenClient sa umiiral na configuration ng seguridad:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Ito ay mga fragment ng configuration para sa isang application na mayroon nang client registration at SecurityFilterChain. Pumipili sila ng HTTP proxy na walang authentication; ang proxy na nangangailangan ng mga kredensyal ay kailangan ang tugmang configuration ng authentication ng piniling transport. Para sa pampublikong naaabot na HTTPS token endpoint sa isang pinapayagang pampublikong ruta, ang HTTP entry mula sa listahan ng HTTP proxy ay maaaring punan ang address ng proxy na walang account.
Panatilihing hiwalay ang host ng proxy mula sa port at scheme ng URL nito. Iwanan ang token URI ng identity provider bilang destinasyon. Hindi pinapalitan ng halimbawa ang pagpapatunay ng sertipiko.
Ang mga susunod na kahilingan ay nangangailangan ng sariling pagsusuri ng pagmamay-ari. Ang pagkuha ng UserInfo, mga palitan ng refresh token, mga grant ng client-credentials at mga tawag sa protektadong API ay maaaring gumamit ng iba pang mga client object. I-configure ang kaukulang sinusuportahang kliyente kapag ang operasyong iyon ay nangangailangan din ng ruta. Para sa reaktibong daloy ng client_credentials ng Spring Security 6.5, i-configure ang reaktibong token client at ang grant provider nito nang hiwalay.
Ang mga lumang halimbawa na gumagamit ng OAuth2RestTemplate at AccessTokenProvider ay kabilang sa mas lumang proyekto ng Spring Security OAuth. Piliin ang API na ginagamit ng naka-install na application bago iakma ang code; huwag ihalo ang mga object na iyon sa configuration na ito.