Der Browser erreicht den Identitätsanbieter, dann schlägt die Anmeldung fehl, wenn die Anwendung den zurückgegebenen Autorisierungscode austauscht. Dieser Austausch ist eine ausgehende Anfrage des Anwendungsservers mit einem eigenen HTTP-Client.

Für die in Spring Security 6.5 verfügbare RestClient-basierte API statten Sie den Token-Antwort-Client für den Autorisierungscode mit einer proxyfähigen Anfrage-Factory aus:

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

Die Konverter- und Fehlerbehandlungsklassen bewahren das dokumentierte Token-Anfrageverhalten von Spring Security. Ein generischer RestClient, der nur für eine unabhängige JSON-API konfiguriert ist, ist kein gleichwertiger Ersatz.

Verdrahten Sie denselben tokenClient in die bestehende Sicherheitskonfiguration:

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

Dies sind Konfigurationsfragmente für eine Anwendung, die bereits ihre Client-Registrierung und SecurityFilterChain besitzt. Sie wählen einen HTTP-Proxy ohne Authentifizierung; ein Proxy, der Anmeldedaten verlangt, benötigt die passende Authentifizierungskonfiguration des gewählten Transports. Für einen öffentlich erreichbaren HTTPS-Token-Endpunkt auf einer zulässigen öffentlichen Route kann ein HTTP-Eintrag aus der HTTP-Proxy-Liste diese Proxy-Adresse ohne Konto füllen.

Halten Sie den Proxy-Host von seinem Port und URL-Schema getrennt. Lassen Sie die Token-URI des Identitätsanbieters das Ziel. Das Beispiel ersetzt nicht die Zertifikatsprüfung.

Spätere Anfragen benötigen eine eigene Eigentumsprüfung. UserInfo-Abruf, Refresh-Token-Austausche, client-credentials-Grants und geschützte API-Aufrufe können andere Client-Objekte verwenden. Konfigurieren Sie den entsprechenden unterstützten Client, wenn dieser Vorgang ebenfalls die Route benötigt. Für den reaktiven client_credentials-Flow von Spring Security 6.5 konfigurieren Sie den reaktiven Token-Client und seinen Grant-Provider separat.

Ältere Beispiele mit OAuth2RestTemplate und AccessTokenProvider gehören zum älteren Spring Security OAuth-Projekt. Wählen Sie die API, die die installierte Anwendung verwendet, bevor Sie Code anpassen; mischen Sie diese Objekte nicht in diese Konfiguration.

Ähnliche Artikel