मैं क्लाइंट से OAuth2 उपयोगकर्ता सेवा में अतिरिक्त पैरामीटर पास करने में सक्षम होना चाहता हूं। इस स्प्रिंग संदर्भ के बाद https://docs.spring.io/spring-security/site/docs/5.1.1.RELEASE/reference/htmlsingle/#oauth2Client-authorization-request-resolver, मैं जोड़ने में सक्षम हूं OAuth2AuthorizationRequest के लिए अतिरिक्त पैरामीटर। जब मैं अपने कस्टम DefaultOAuth2UserService में पैरामीटर पुनर्प्राप्त करने का प्रयास करता हूं तो यह अब OAuth2UserRequest का हिस्सा नहीं है।
मुझे लगता है कि समस्या OAuth2AuthorizationRequest की समाधान विधि से संबंधित है जिसे दो बार बुलाया जा रहा है, दूसरी बार प्राधिकरण अनुरोध शून्य है। नीचे डिबग लॉग देखें
इस समस्या का निवारण/ठीक करने के बारे में कोई सुझाव?
ग्राहक अनुरोध
http://localhost:8080/oauth2/authorize/github?redirect_uri=http://localhost:3000/oauth2/redirect&action=signup
विस्तृत लॉग
CustomAuthorizationRequestResolver : in CustomAuthorizationRequestResolver.resolve() authorizationRequest is [Initialized]
CustomAuthorizationRequestResolver: action parameter from HttpServletRequest is [signup]
CustomAuthorizationRequestResolver: number of additional parameters added to OAuth2AuthorizationRequest is [1]
CustomAuthorizationRequestResolver: in CustomAuthorizationRequestResolver.resolve() authorizationRequest is [null]
CustomOAuth2UserService: in CustomOAuth2UserService.loadUser() size of additional parameters [0]
CustomAuthorizationRequestResolver
public class CustomAuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {
private final static Logger logger = LoggerFactory.getLogger(CustomAuthorizationRequestResolver.class);
private final OAuth2AuthorizationRequestResolver defaultAuthorizationRequestResolver;
public CustomAuthorizationRequestResolver(ClientRegistrationRepository clientRegistrationRepository) {
this.defaultAuthorizationRequestResolver = new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository,
"/oauth2/authorize");
}
@Override
public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
OAuth2AuthorizationRequest authorizationRequest = this.defaultAuthorizationRequestResolver.resolve(request);
logger.debug("in CustomAuthorizationRequestResolver.resolve() authorizationRequest is [{}]",
authorizationRequest == null ? "null" : "Initialized");
return authorizationRequest != null ? customAuthorizationRequest(request, authorizationRequest) : null;
}
@Override
public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
OAuth2AuthorizationRequest authorizationRequest = this.defaultAuthorizationRequestResolver.resolve(
request, clientRegistrationId);
return authorizationRequest != null ? customAuthorizationRequest(request, authorizationRequest) : null;
}
private OAuth2AuthorizationRequest customAuthorizationRequest(HttpServletRequest request,
OAuth2AuthorizationRequest authorizationRequest) {
String action = request.getParameter("action");
logger.debug("action parameter from HttpServletRequest is [{}]", action);
Map<String, Object> additionalParameters = new LinkedHashMap<>(authorizationRequest.getAdditionalParameters());
additionalParameters.put("action", action);
OAuth2AuthorizationRequest rtn = OAuth2AuthorizationRequest.from(authorizationRequest).additionalParameters(
additionalParameters).build();
logger.debug("number of additional parameters added to OAuth2AuthorizationRequest is [{}]", rtn.getAdditionalParameters()
.size());
return rtn;
}
}
CustomOAuth2UserService
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
private final Logger logger = LoggerFactory.getLogger(CustomOAuth2UserService.class);
@Autowired
private UserRepository userRepository;
@Override
public OAuth2User loadUser(OAuth2UserRequest oAuth2UserRequest) throws OAuth2AuthenticationException {
OAuth2User oAuth2User = super.loadUser(oAuth2UserRequest);
logger.debug("in CustomOAuth2UserService.loadUser() size of additional parameters [{}]", oAuth2UserRequest
.getAdditionalParameters().size());
// other processing
}
// other methods
}
1 उत्तर
OAuth2AuthorizationRequest
और OAuth2UserRequest
अलग-अलग एंडपॉइंट के लिए अलग-अलग अनुरोध हैं।
OAuth2AuthorizationRequest
, http://localhost:8080/oauth2/authorize/github?redirect_uri=http://localhost:3000/oauth2/redirect&action=signup
के अनुरोध का प्रतिनिधित्व करता है, जबकि OAuth2UserRequest
, उदाहरण के लिए, http://localhost:3000/userinfo
के अनुरोध का प्रतिनिधित्व करता है।
अतिरिक्त पैरामीटर कभी भी OAuth2UserRequest
का हिस्सा नहीं था।
संबंधित सवाल
नए सवाल
spring-security
स्प्रिंग सिक्योरिटी, स्प्रिंग फ्रेमवर्क का एप्लिकेशन सुरक्षा समाधान है। स्प्रिंग सुरक्षा का उपयोग URL और विधि चालानों को सुरक्षित करने के लिए किया जा सकता है। यह व्यापक रूप से स्टैंडअलोन वेब एप्लिकेशन, पोर्टलेट्स और तेजी से REST अनुप्रयोगों को सुरक्षित करने के लिए उपयोग किया जाता है।
OAuth2AuthorizationRequest
औरOAuth2UserRequest
अलग-अलग एंडपॉइंट के लिए अलग-अलग अनुरोध हैं।OAuth2AuthorizationRequest
,http://localhost:8080/oauth2/authorize/github?redirect_uri=http://localhost:3000/oauth2/redirect&action=signup
के अनुरोध का प्रतिनिधित्व करता है, औरOAuth2UserRequest
, उदाहरण के लिए,http://localhost:3000/userinfo
के अनुरोध का प्रतिनिधित्व करता है। अतिरिक्त पैरामीटर कभी भीOAuth2UserRequest
का हिस्सा नहीं था।