Pārlūkprogramma sasniedz identitātes nodrošinātāju, pēc tam pieteikšanās neizdodas, kad lietotne apmaina atgriezto autorizācijas kodu. Šī apmaiņa ir izejošs pieprasījums no lietotnes servera, ar savu HTTP klientu.

Spring Security 6.5 pieejamajai uz RestClient balstītajai API piešķiriet autorizācijas koda tokena atbildes klientam starpniekserveri saprotošu pieprasījumu fabriku:

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

Pārveidotāja un kļūdu apstrādātāja klases saglabā Spring Security dokumentēto tokena pieprasījuma uzvedību. Vispārīgs RestClient, kas konfigurēts tikai nesaistītai JSON API, nav līdzvērtīgs aizstājējs.

Savienojiet to pašu tokenClient ar esošo drošības konfigurāciju:

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

Šie ir konfigurācijas fragmenti lietotnei, kurai jau ir klienta reģistrācija un SecurityFilterChain. Tie izvēlas HTTP starpniekserveri bez autentifikācijas; starpniekserverim, kas prasa akreditācijas datus, nepieciešama atbilstošā izvēlētā transporta autentifikācijas konfigurācija. Publiski sasniedzamam HTTPS tokena galapunktam atļautā publiskā maršrutā HTTP ieraksts no HTTP starpniekserveru saraksta var aizpildīt šo bez konta starpniekservera adresi.

Turiet starpniekservera resursdatoru atsevišķi no tā porta un URL shēmas. Atstājiet identitātes nodrošinātāja tokena URI kā galamērķi. Piemērs neaizstāj sertifikātu validāciju.

Vēlākiem pieprasījumiem nepieciešama sava īpašumtiesību pārbaude. UserInfo iegūšana, atsvaidzināšanas tokena apmaiņas, client-credentials dotācijas un aizsargātu API izsaukumi var izmantot citus klienta objektus. Konfigurējiet atbilstošo atbalstīto klientu, kad šai darbībai arī nepieciešams maršruts. Spring Security 6.5 reaktīvajai client_credentials plūsmai atsevišķi konfigurējiet reaktīvo tokena klientu un tā dotāciju nodrošinātāju.

Vecāki piemēri ar OAuth2RestTemplate un AccessTokenProvider pieder vecākajam Spring Security OAuth projektam. Pirms koda pielāgošanas izvēlieties API, ko izmanto instalētā lietotne; nejauciet šos objektus šajā konfigurācijā.

Saistītie raksti