Spring Security 6.5: OAuth avtorizasiya kodu mübadiləsini proksi ilə keçirin
Spring Security-nin avtorizasiya kodu token cavab müştərisinə OAuth çeviricilərini və xəta idarəçisini saxlayaraq proksi-dostu RestClient verin.
Brauzer kimlik provayderinə çatır, sonra tətbiq qaytarılan avtorizasiya kodunu mübadilə edərkən giriş uğursuz olur. Bu mübadilə tətbiq serverindən çıxan sorğudur və öz HTTP müştərisinə malikdir.
Spring Security 6.5-də mövcud olan RestClient əsaslı API üçün avtorizasiya kodu token cavab müştərisinə proksi-dostu sorğu fabriki təqdim edin:
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);
Çevirici və xəta idarəçisi sinifləri Spring Security-nin sənədləşdirilmiş token sorğusu davranışını qoruyur. Yalnız əlaqəsiz JSON API üçün konfiqurasiya edilmiş ümumi RestClient ekvivalent əvəz deyil.
Həmin tokenClient-i mövcud təhlükəsizlik konfiqurasiyasına qoşun:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Bunlar artıq müştəri qeydiyyatı və SecurityFilterChain olan tətbiq üçün konfiqurasiya fraqmentləridir. Onlar autentifikasiyasız HTTP proksi seçir; etimadnamə tələb edən proksi seçilmiş nəqliyyatın uyğun autentifikasiya konfiqurasiyasına ehtiyac duyur. İcazə verilmiş ictimai marşrutda ictimaiyyətə açıq HTTPS token son nöqtəsi üçün HTTP proksi siyahısından HTTP qeydi həmin hesabsız proksi ünvanını doldura bilər.
Proksi hostunu portundan və URL sxemindən ayrı saxlayın. Kimlik provayderinin token URI-ni təyinat kimi buraxın. Nümunə sertifikat yoxlamasını əvəz etmir.
Sonrakı sorğular öz sahiblik yoxlamasına ehtiyac duyur. UserInfo əldə etmə, yeniləmə tokeni mübadilələri, client-credentials qrantları və qorunan API çağırışları başqa müştəri obyektlərindən istifadə edə bilər. Həmin əməliyyat da marşruta ehtiyac duyduqda uyğun dəstəklənən müştərini konfiqurasiya edin. Spring Security 6.5-in reaktiv client_credentials axını üçün reaktiv token müştərisini və onun qrant provayderini ayrıca konfiqurasiya edin.
OAuth2RestTemplate və AccessTokenProvider istifadə edən köhnə nümunələr köhnə Spring Security OAuth layihəsinə aiddir. Kodu uyğunlaşdırmadan əvvəl quraşdırılmış tətbiqin istifadə etdiyi API-ni seçin; həmin obyektləri bu konfiqurasiyaya qarışdırmayın.