Browseren når identitetsudbyderen, og derefter mislykkes login, når applikationen udveksler den returnerede autorisationskode. Den udveksling er en udgående anmodning fra applikationsserveren med sin egen HTTP-klient.

Til det RestClient-baserede API i Spring Security 6.5 skal du give klienten til tokenrespons for autorisationskoden en proxybevidst anmodningsfabrik:

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- og fejlhandlerklasserne bevarer Spring Securitys dokumenterede adfærd for tokenanmodninger. En generisk RestClient, der kun er konfigureret til et urelateret JSON-API, er ikke en tilsvarende erstatning.

Forbind den samme tokenClient med den eksisterende sikkerhedskonfiguration:

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

Dette er konfigurationsfragmenter til en applikation, der allerede har sin klientregistrering og SecurityFilterChain. De vælger en HTTP-proxy uden godkendelse; en proxy, der kræver legitimationsoplysninger, har brug for den valgte transports tilsvarende godkendelseskonfiguration. Til et offentligt tilgængeligt HTTPS-tokenendepunkt på en tilladt offentlig rute kan en HTTP-post fra HTTP-proxylisten udfylde den proxyadresse uden konto.

Hold proxyværten adskilt fra dens port og URL-skema. Lad identitetsudbyderens token-URI være destinationen. Eksemplet erstatter ikke certifikatvalidering.

Senere anmodninger har brug for deres egen ejerskabskontrol. Hentning af UserInfo, udvekslinger af opdateringstokens, client-credentials-tildelinger og beskyttede API-kald kan bruge andre klientobjekter. Konfigurer den tilsvarende understøttede klient, når den handling også har brug for ruten. Til Spring Security 6.5's reaktive client_credentials-flow skal du konfigurere den reaktive tokenklient og dens tildelingsudbyder separat.

Ældre eksempler med OAuth2RestTemplate og AccessTokenProvider hører til det ældre Spring Security OAuth-projekt. Vælg det API, som den installerede applikation bruger, før du tilpasser kode; bland ikke disse objekter ind i denne konfiguration.

Relaterede artikler