Spring Security 6.5: OAuth avtorizatsiya kodini proxy orqali almashish
Spring Security'ning avtorizatsiya kodi tokeniga javob mijozi uchun proksini taniydigan RestClient bering, OAuth konverterlari va xato ishlovchisini saqlab.
Brauzer identifikatsiya provayderiga yetib boradi, so'ngra ilova qaytarilgan avtorizatsiya kodini almashtirganda kirish muvaffaqiyatsiz bo'ladi. Bu almashinuv ilova serveridan chiquvchi so'rov bo'lib, o'z HTTP mijoziga ega.
Spring Security 6.5da mavjud RestClient asosidagi API uchun avtorizatsiya kodi tokeniga javob mijoziga proksini taniydigan so'rov fabrikasini bering:
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);
Konverter va xato ishlovchisi sinflari Spring Security'ning hujjatlashtirilgan token so'rovi xatti-harakatini saqlaydi. Faqat bog'liq bo'lmagan JSON API uchun sozlangan umumiy RestClient teng qiymatli almashtirish emas.
Xuddi shu tokenClientni mavjud xavfsizlik konfiguratsiyasiga ulang:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
Bular mijoz ro'yxatga olishi va SecurityFilterChain allaqachon mavjud ilova uchun konfiguratsiya bo'laklari. Ular autentifikatsiyasiz HTTP proksini tanlaydi; hisob ma'lumotlarini talab qiladigan proksi tanlangan transportning mos autentifikatsiya konfiguratsiyasini talab qiladi. Ruxsat etilgan ommaviy marshrutda ommaga ochiq HTTPS token oxirgi nuqtasi uchun HTTP proksilar ro'yxatidan HTTP yozuvi o'sha hisobsiz proksi manzilini to'ldirishi mumkin.
Proksi xostini porti va URL sxemasidan alohida saqlang. Identifikatsiya provayderining token URI manzilini manzil sifatida qoldiring. Misol sertifikat tekshiruvini almashtirmaydi.
Keyingi so'rovlar o'z egalik tekshiruviga muhtoj. UserInfo olish, yangilash tokeni almashinuvlari, client-credentials grantlari va himoyalangan API chaqiruvlari boshqa mijoz obyektlaridan foydalanishi mumkin. Bu operatsiya ham marshrutni talab qilganda tegishli qo'llab-quvvatlanadigan mijozni sozlang. Spring Security 6.5ning reaktiv client_credentials oqimi uchun reaktiv token mijozini va uning grant provayderini alohida sozlang.
OAuth2RestTemplate va AccessTokenProvider ishlatadigan eski misollar eski Spring Security OAuth loyihasiga tegishli. Kodni moslashtirishdan oldin o'rnatilgan ilova ishlatadigan API ni tanlang; bu obyektlarni ushbu konfiguratsiyaga aralashtirmang.