Spring Security 6.5: عبور تبادل کد مجوز OAuth از طریق پروکسی
به مشتری پاسخ توکن کد مجوز Spring Security یک RestClient پروکسیآگاه بدهید و در عین حال مبدلهای OAuth و مدیریتکننده خطا را حفظ کنید.
مرورگر به ارائهدهنده هویت میرسد، سپس ورود ناموفق میشود وقتی برنامه کد مجوز برگشتی را مبادله میکند. این مبادله درخواستی خروجی از سرور برنامه است و کلاینت HTTP خودش را دارد.
برای API مبتنی بر RestClient که در Spring Security 6.5 موجود است، یک کارخانه درخواست پروکسیآگاه به مشتری پاسخ توکن کد مجوز بدهید:
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);
کلاسهای مبدل و مدیریتکننده خطا رفتار مستند درخواست توکن Spring Security را حفظ میکنند. یک RestClient عمومی که فقط برای یک API JSON نامرتبط پیکربندی شده، جایگزین معادلی نیست.
همان tokenClient را به پیکربندی امنیتی موجود متصل کنید:
http.oauth2Login(login -> login
.tokenEndpoint(token -> token
.accessTokenResponseClient(tokenClient)));
اینها قطعههای پیکربندی برای برنامهای هستند که از قبل ثبتنام کلاینت و SecurityFilterChain دارد. آنها یک پروکسی HTTP بدون احراز هویت انتخاب میکنند؛ پروکسیای که اعتبارنامه میخواهد به پیکربندی احراز هویت متناظر با انتقال انتخابی نیاز دارد. برای نقطه پایانی توکن HTTPS با دسترسی عمومی روی مسیر عمومی مجاز، یک ورودی HTTP از فهرست پروکسیهای HTTP میتواند آن نشانی پروکسی بدون حساب را پر کند.
میزبان پروکسی را از درگاه و طرح URL آن جدا نگه دارید. URI توکن ارائهدهنده هویت را بهعنوان مقصد بگذارید. این مثال اعتبارسنجی گواهی را جایگزین نمیکند.
درخواستهای بعدی بررسی مالکیت خودشان را نیاز دارند. واکشی UserInfo، تبادلهای توکن تازهسازی، اعطاهای client-credentials و فراخوانیهای API محافظتشده میتوانند از اشیای کلاینت دیگر استفاده کنند. وقتی آن عملیات هم به مسیر نیاز دارد، کلاینت پشتیبانیشده مربوطه را پیکربندی کنید. برای جریان client_credentials واکنشی Spring Security 6.5، کلاینت توکن واکنشی و تأمینکننده اعطای آن را جداگانه پیکربندی کنید.
مثالهای قدیمی که از OAuth2RestTemplate و AccessTokenProvider استفاده میکنند به پروژه قدیمیتر Spring Security OAuth تعلق دارند. پیش از تطبیق کد، API مورد استفاده برنامه نصبشده را انتخاب کنید؛ آن اشیا را در این پیکربندی مخلوط نکنید.