De browser bereikt de identiteitsprovider, waarna de aanmelding mislukt wanneer de applicatie de teruggegeven autorisatiecode uitwisselt. Die uitwisseling is een uitgaand verzoek van de applicatieserver, met een eigen HTTP-client.

Voor de op RestClient gebaseerde API die beschikbaar is in Spring Security 6.5, voorziet u de tokenresponsclient voor de autorisatiecode van een proxybewuste verzoekfactory:

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 converter- en foutafhandelingsklassen behouden het gedocumenteerde tokenverzoekgedrag van Spring Security. Een generieke RestClient die alleen voor een niet-gerelateerde JSON-API is geconfigureerd, is geen gelijkwaardige vervanging.

Sluit dezelfde tokenClient aan op de bestaande beveiligingsconfiguratie:

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

Dit zijn configuratiefragmenten voor een applicatie die al haar clientregistratie en SecurityFilterChain heeft. Ze selecteren een HTTP-proxy zonder authenticatie; een proxy die inloggegevens vereist, heeft de bijbehorende authenticatieconfiguratie van het gekozen transport nodig. Voor een openbaar bereikbaar HTTPS-token-eindpunt op een toegestane openbare route kan een HTTP-vermelding uit de HTTP-proxylijst dat proxyadres zonder account invullen.

Houd de proxyhost gescheiden van de poort en het URL-schema. Laat de token-URI van de identiteitsprovider de bestemming blijven. Het voorbeeld vervangt de certificaatvalidatie niet.

Latere verzoeken hebben hun eigen eigendomscontrole nodig. Het ophalen van UserInfo, uitwisselingen van vernieuwingstokens, client-credentials-toekenningen en beveiligde API-aanroepen kunnen andere clientobjecten gebruiken. Configureer de overeenkomstige ondersteunde client wanneer die bewerking ook de route nodig heeft. Voor de reactieve client_credentials-stroom van Spring Security 6.5 configureert u de reactieve tokenclient en de bijbehorende toekenningsprovider apart.

Oudere voorbeelden met OAuth2RestTemplate en AccessTokenProvider horen bij het oudere Spring Security OAuth-project. Kies de API die de geïnstalleerde applicatie gebruikt voordat u code aanpast; meng die objecten niet in deze configuratie.

Gerelateerde artikelen