मैं अपने नए आरईएसटी सर्वर और हमारे मौजूदा क्लाइंट ऐप के बीच क्लाइंट क्रेडेंशियल्स प्रवाह को समझने और कार्यान्वित करने की कोशिश कर रहा हूं। मैंने वसंत-सुरक्षा OAuth2 को this की तरह सेटअप किया है। अब तक मेरी समझ से, अपने सर्वर अब निम्न अनुरोध का समर्थन करना चाहिए:ओएथ 2 क्लाइंट क्रेडेंशियल प्रवाह को समझना
$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/oauth/token"
लेकिन मैं
InsufficientAuthenticationException: There is no client authentication
Principal
(वसंत-सुरक्षा कोड) किया जा रहा है null
यहाँ की वजह से मिलता है:
@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {
@RequestMapping
public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
@RequestParam("grant_type") String grantType, @RequestParam Map<String, String> parameters) {
if (!(principal instanceof Authentication)) {
throw new InsufficientAuthenticationException(
तो ऐसा लगता है, मुझे सर्वर सर्वर के विरुद्ध प्रमाणित करने की आवश्यकता है। लेकिन यह नहीं है जो मैं करना चाहता हूं। मैं चाहता हूं कि मेरे दो सर्वर एक साझा रहस्य का उपयोग करके एक-दूसरे से बात करें। OAuth प्रदाता सर्वर को अनुरोध पर (विश्वसनीय) क्लाइंट सर्वर तक पहुंच टोकन प्रदान करना चाहिए ताकि क्लाइंट सर्वर सर्वर पर सभी REST संसाधनों तक पहुंचने के लिए उस टोकन का उपयोग कर सके। यह बाहरी पहुंच से आरईएसटी संसाधनों की रक्षा करनी चाहिए।
बाद में मैं चयनित संसाधनों को किसी तृतीय पक्ष को प्रदान करना चाहता हूं और अंत में सर्वर-से-सर्वर संचार के लिए कुछ बेहतर अनाज सुरक्षा भी लागू करना चाहता हूं। लेकिन अभी के लिए मुझे बाहरी एक्सेस से आरईएसटी सर्वर की रक्षा करने की आवश्यकता है।
ऐसा लगता है कि मुझे पूरे ग्राहक प्रमाण-पत्र प्रवाह या वसंत-सुरक्षा के अनुप्रयोग के बारे में कुछ गलतफहमी हो सकती है, इसलिए कोई स्पष्टीकरण की सराहना की जाएगी।
आपके उत्तर के लिए धन्यवाद। तो विचार की मेरी ट्रेन मूल रूप से सही है? क्लाइंट क्रेडेंशियल प्रवाह के लिए मैं क्लाइंट क्रेडेंशियल और अनुदान प्रकार के साथ टोकन का अनुरोध करता हूं और फिर सुरक्षित संसाधनों तक पहुंचने के लिए उस टोकन का उपयोग करता हूं? मुझे लगता है कि मेरे पास बस एक सेटअप त्रुटि है, क्योंकि स्पार्कलर उदाहरण प्रोजेक्ट का उपयोग करते हुए मैंने ऊपर उल्लिखित कॉल काम किया है .. – Pete
मुझे लगता है कि आप सही रास्ते पर हैं। क्लाइंट एक विशेष अनुदान प्रकार का उपयोग कर पहले टोकन का अनुरोध करता है। फिर संरक्षित संसाधन तक पहुंचने पर आप ऑथ हेडर में टोकन पास करते हैं। मैंने संसाधन का उपयोग करने के उदाहरण के साथ अपना जवाब अपडेट किया है। – kldavis4