Webbläsaren når identitetsleverantören, sedan misslyckas inloggningen när applikationen utbyter den returnerade auktoriseringskoden. Det utbytet är en utgående begäran från applikationsservern, med sin egen HTTP-klient.

För det RestClient-baserade API som är tillgängligt i Spring Security 6.5, ge tokenresponsklienten för auktoriseringskoden en proxy medveten begäransfabrik:

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);

Konverter- och felhanterarklasserna bevarar Spring Securitys dokumenterade tokenbegäransbeteende. En generisk RestClient som bara är konfigurerad för ett orelaterat JSON-API är inte en likvärdig ersättning.

Anslut samma tokenClient till den befintliga säkerhetskonfigurationen:

http.oauth2Login(login -> login
    .tokenEndpoint(token -> token
        .accessTokenResponseClient(tokenClient)));

Detta är konfigurationsfragment för en applikation som redan har sin klientregistrering och SecurityFilterChain. De väljer en HTTP-proxy utan autentisering; en proxy som kräver inloggningsuppgifter behöver den valda transportens motsvarande autentiseringskonfiguration. För en offentligt nåbar HTTPS-tokenändpunkt på en tillåten offentlig rutt kan en HTTP-post från HTTP-proxylistan fylla den proxyadressen utan konto.

Håll proxyvärden separat från dess port och URL-schema. Låt identitetsleverantörens token-URI vara destinationen. Exemplet ersätter inte certifikatvalidering.

Senare begäranden behöver sin egen ägarkontroll. Hämtning av UserInfo, utbyten av uppdateringstoken, client-credentials-tilldelningar och skyddade API-anrop kan använda andra klientobjekt. Konfigurera motsvarande klient som stöds när den åtgärden också behöver rutten. För Spring Security 6.5:s reaktiva client_credentials-flöde konfigurerar du den reaktiva tokenklienten och dess tilldelningsleverantör separat.

Äldre exempel med OAuth2RestTemplate och AccessTokenProvider tillhör det äldre Spring Security OAuth-projektet. Välj det API som den installerade applikationen använder innan du anpassar kod; blanda inte in dessa objekt i den här konfigurationen.

Relaterade artiklar