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 ଚୟନ କରନ୍ତୁ; ସେହି ବସ୍ତୁଗୁଡ଼ିକୁ ଏହି ବିନ୍ୟାସରେ ମିଶାନ୍ତୁ ନାହିଁ।