Spring Security 6.5: OAuth-valtuutuskoodin vaihdon välittäminen välityspalvelimen kautta
Anna Spring Securityn valtuutuskoodin tokenvasteasiakkaalle välityspalvelimen huomioiva RestClient ja säilytä sen OAuth-muuntimet ja virheenkäsittelijä.
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.