मेरे पास एक अतिरिक्त एपीआई है जहां मैं वसंत सुरक्षा मूल प्रमाणीकरण का उपयोग करके प्रमाणीकरण कर रहा हूं जहां ग्राहक प्रत्येक अनुरोध के लिए उपयोगकर्ता नाम और पासवर्ड भेजता है। अब, मैं टोकन आधारित प्रमाणीकरण को कार्यान्वित करना चाहता हूं, जहां मैं पहली बार प्रमाणीकृत होने पर प्रतिक्रिया शीर्षलेख में टोकन भेजूंगा। आगे के अनुरोधों के लिए, क्लाइंट उस शीर्षलेख में टोकन शामिल कर सकता है जिसका उपयोग उपयोगकर्ता को संसाधनों को प्रमाणीकृत करने के लिए किया जाएगा। मैं दो प्रमाणीकरण प्रदाताओं tokenAuthenticationProvider और daoAuthenticationProviderस्प्रिंग सिक्योरिटी टोकन आधारित प्रमाणीकरण
@Component
public class TokenAuthenticationProvider implements AuthenticationProvider {
@Autowired
private TokenAuthentcationService service;
@Override
public Authentication authenticate(final Authentication authentication) throws AuthenticationException {
final RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
final HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
final String token = request.getHeader(Constants.AUTH_HEADER_NAME);
final Token tokenObj = this.service.getToken(token);
final AuthenticationToken authToken = new AuthenticationToken(tokenObj);
return authToken;
}
@Override
public boolean supports(final Class<?> authentication) {
return AuthenticationToken.class.isAssignableFrom(authentication);
}
}
और daoAuthenticationProvider में मैं कस्टम userDetailsService की स्थापना कर रहा हूँ और (डेटाबेस से यह प्राप्त करते समय जो ठीक जब तक उपयोगकर्ता नाम और पासवर्ड के रूप में काम कर रहा है द्वारा उपयोगकर्ता लॉगइन विवरण के खिलाफ के सत्यापन का उपयोग कर पारित कर रहे हैं है प्राधिकरण: हेडर के रूप में बेसिक bGllQXBpVXNlcjogN21wXidMQjRdTURtR04pag ==)
लेकिन जब मैं हैडर एक्स प्राधि-टोकन (जो Constants.AUTH_HEADER_NAME है) का उपयोग करने में टोकन शामिल, tokenAuthenticationProvider नहीं बुलाया जा रहा है। मुझे
{"timestamp":1487626368308,"status":401,"error":"Unauthorized","message":"Full authentication is required to access this resource","path":"/find"}
और यहां यह है कि मैं प्रमाणीकरण प्रदाताओं को कैसे जोड़ रहा हूं।
@Override
public void configure(final AuthenticationManagerBuilder auth) throws Exception {
final UsernamePasswordAuthenticationProvider daoProvider = new
UsernamePasswordAuthenticationProvider(this.service, this.passwordEncoder());
auth.authenticationProvider(this.tokenAuthenticationProvider);
auth.authenticationProvider(daoProvider);
}
कृपया सुझाव दें कि मैं वसंत सुरक्षा के वर्तमान व्यवहार को प्रभावित किए बिना टोकन आधारित प्रमाणीकरण को कैसे कार्यान्वित कर सकता हूं।
आपके पास ऐसा करने के विभिन्न तरीके हैं, आप प्रदाता को प्रत्येक फ़िल्टर पर सीधे प्रयुक्त कर सकते हैं, या प्रदाता को एक प्रमाणीकरण प्रबंधक में सेट कर सकते हैं, और दोनों FIlters में इसके साथ काम कर सकते हैं। बेशक, आपको वसंत सुरक्षा फ़िल्टरChain में दोनों फ़िल्टर सेट करना होगा। – Dani