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.

Související články