Selain saavuttaa identiteetintarjoajan, ja sitten kirjautuminen epäonnistuu, kun sovellus vaihtaa palautetun valtuutuskoodin. Tämä vaihto on sovelluspalvelimelta lähtevä pyyntö, jolla on oma HTTP-asiakas.

Spring Security 6.5:ssä saatavilla olevalle RestClient-pohjaiselle API:lle anna valtuutuskoodin tokenvasteasiakkaalle välityspalvelimen huomioiva pyyntötehdas:

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

Muunnin- ja virheenkäsittelijäluokat säilyttävät Spring Securityn dokumentoidun tokenpyynnön käyttäytymisen. Yleinen RestClient, joka on määritetty vain erilliselle JSON-API:lle, ei ole vastaava korvaaja.

Kytke sama tokenClient olemassa olevaan suojausturvamääritykseen:

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

Nämä ovat määritysfragmentteja sovellukselle, jolla on jo asiakasrekisteröintinsä ja SecurityFilterChain. Ne valitsevat HTTP-välityspalvelimen ilman todennusta; tunnistetietoja vaativa välityspalvelin tarvitsee valitun siirtotien vastaavan todennusmäärityksen. Julkisesti saavutettavalle HTTPS-tokenin päätepisteelle sallitulla julkisella reitillä HTTP-välityspalvelinluettelon HTTP-merkintä voi täyttää kyseisen tilittömän välityspalvelimen osoitteen.

Pidä välityspalvelimen isäntä erillään sen portista ja URL-kaaviosta. Jätä identiteetintarjoajan token-URI kohteeksi. Esimerkki ei korvaa varmenteen validointia.

Myöhemmät pyynnöt tarvitsevat oman omistajuustarkistuksensa. UserInfon haku, päivitystokenien vaihdot, client-credentials-myönnytykset ja suojatut API-kutsut voivat käyttää muita asiakasobjekteja. Määritä vastaava tuettu asiakas, kun kyseinen toiminto tarvitsee myös reitin. Spring Security 6.5:n reaktiiviselle client_credentials-virralle määritä reaktiivinen tokenasiakas ja sen myönnöntarjoaja erikseen.

Vanhat esimerkit, jotka käyttävät OAuth2RestTemplatea ja AccessTokenProvideria, kuuluvat vanhempaan Spring Security OAuth -projektiin. Valitse API, jota asennettu sovellus käyttää, ennen kuin mukautat koodia; älä sekoita näitä objekteja tähän määritykseen.

Aiheeseen liittyvät artikkelit