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