Spring Security 6.5: proxy pro výměnu autorizačního kódu OAuth
Poskytněte klientovi odpovědi s tokenem autorizačního kódu v Spring Security RestClient s podporou proxy a zachovejte přitom jeho OAuth konvertory a obsluhu chyb.
Prohlížeč se dostane k poskytovateli identity, a pak přihlášení selže, když aplikace vymění vrácený autorizační kód. Tato výměna je odchozí požadavek z aplikačního serveru s vlastním HTTP klientem.
Pro API založené na RestClient dostupné v Spring Security 6.5 poskytněte klientovi odpovědi s tokenem autorizačního kódu továrnu požadavků s podporou 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);
Třídy konvertoru a obsluhy chyb zachovávají dokumentované chování tokenového požadavku Spring Security. Obecný RestClient nakonfigurovaný pouze pro nesouvisející JSON API není rovnocennou náhradou.
Zapojte stejný tokenClient do stávající bezpečnostní konfigurace:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Toto jsou fragmenty konfigurace pro aplikaci, která již má registraci klienta a SecurityFilterChain. Volí HTTP proxy bez ověřování; proxy vyžadující přihlašovací údaje potřebuje odpovídající konfiguraci ověřování zvoleného přenosu. Pro veřejně dostupný koncový bod tokenu HTTPS na povolené veřejné trase může HTTP záznam z seznamu HTTP proxy vyplnit tuto adresu proxy bez účtu.
Udržujte hostitele proxy odděleně od jeho portu a schématu URL. Ponechte URI tokenu poskytovatele identity jako cíl. Příklad nenahrazuje ověřování certifikátů.
Pozdější požadavky potřebují vlastní kontrolu vlastnictví. Načtení UserInfo, výměny obnovovacích tokenů, granty client-credentials a volání chráněného API mohou používat jiné klientské objekty. Nakonfigurujte odpovídající podporovaný klient, když tato operace také potřebuje trasu. Pro reaktivní tok client_credentials v Spring Security 6.5 nakonfigurujte reaktivního klienta tokenů a jeho poskytovatele grantů samostatně.
Starší příklady používající OAuth2RestTemplate a AccessTokenProvider patří ke staršímu projektu Spring Security OAuth. Před úpravou kódu zvolte API, které používá nainstalovaná aplikace; nemíchejte tyto objekty do této konfigurace.