Spring Security 6.5: OAuth autorizacijos kodo keitimo nukreipimas per tarpinį serverį
Suteikite Spring Security autorizacijos kodo tokeno atsakymo klientui tarpinį serverį suprantantį RestClient, išlaikydami jo OAuth konverterius ir klaidų tvarkytuvą.
Naršyklė pasiekia tapatybės teikėją, tada prisijungimas nepavyksta, kai programėlė apsikeičia grąžintu autorizacijos kodu. Tas apsikeitimas yra išeinanti užklausa iš programėlės serverio, turinti savo HTTP klientą.
Spring Security 6.5 pasiekiamai RestClient pagrįstai API suteikite autorizacijos kodo tokeno atsakymo klientui tarpinį serverį suprantančią užklausų gamyklą:
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);
Konverterio ir klaidų tvarkytuvo klasės išlaiko dokumentuotą Spring Security tokeno užklausos elgesį. Bendras RestClient, sukonfigūruotas tik nesusijusiai JSON API, nėra lygiavertis pakaitalas.
Prijunkite tą patį tokenClient prie esamos saugumo konfigūracijos:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Tai konfigūracijos fragmentai programėlei, kuri jau turi kliento registraciją ir SecurityFilterChain. Jie pasirenka HTTP tarpinį serverį be autentifikavimo; tarpinis serveris, reikalaujantis kredencialų, turi turėti atitinkamą pasirinkto transporto autentifikavimo konfigūraciją. Viešai pasiekiamam HTTPS tokeno galiniam taškui leistiname viešame maršrute HTTP įrašas iš HTTP tarpinių serverių sąrašo gali užpildyti tą be paskyros tarpinio serverio adresą.
Laikykite tarpinio serverio mazgą atskirai nuo jo prievado ir URL schemos. Palikite tapatybės teikėjo tokeno URI kaip paskirties vietą. Pavyzdys nepakeičia sertifikatų tikrinimo.
Vėlesnės užklausos turi savo nuosavybės patikrą. UserInfo gavimas, atnaujinimo tokeno apsikeitimai, client-credentials dotacijos ir apsaugoti API iškvietimai gali naudoti kitus kliento objektus. Sukonfigūruokite atitinkamą palaikomą klientą, kai ta operacija taip pat reikalauja maršruto. Spring Security 6.5 reaktyviam client_credentials srautui atskirai sukonfigūruokite reaktyvų tokeno klientą ir jo dotacijų teikėją.
Senuosiuose pavyzdžiuose naudojami OAuth2RestTemplate ir AccessTokenProvider priklauso senesniam Spring Security OAuth projektui. Prieš pritaikydami kodą pasirinkite API, kurį naudoja įdiegta programėlė; nemaišykite tų objektų į šią konfigūraciją.