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 ব্যবহার করে তা বেছে নিন; সেই অবজেক্টগুলো এই কনফিগারেশনে মেশাবেন না।