क्लाइंट क्रेडेंशियल के अनुदान टाइप को लागू करना

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

क्लाइंट क्रेडेंशियल ग्रांट टाइप की मदद से, कोई ऐप्लिकेशन अपने क्रेडेंशियल (क्लाइंट आईडी और क्लाइंट सीक्रेट) को Apigee Edge के उस एंडपॉइंट पर भेजता है जिसे ऐक्सेस टोकन जनरेट करने के लिए सेट अप किया गया है. अगर क्रेडेंशियल मान्य हैं, तो Edge, क्लाइंट ऐप्लिकेशन को ऐक्सेस टोकन भेजता है.

इस विषय के बारे में जानकारी

इस विषय में, OAuth 2.0 क्लाइंट क्रेडेंशियल ग्रांट टाइप के बारे में सामान्य जानकारी दी गई है. साथ ही, इसमें Apigee Edge पर इस फ़्लो को लागू करने के तरीके के बारे में बताया गया है.

उपयोग के उदाहरण

आम तौर पर, इस तरह के ग्रांट का इस्तेमाल तब किया जाता है, जब ऐप्लिकेशन भी संसाधन का मालिक हो. उदाहरण के लिए, किसी ऐप्लिकेशन को बैकएंड क्लाउड-आधारित स्टोरेज सेवा को ऐक्सेस करने की ज़रूरत पड़ सकती है, ताकि वह उस डेटा को सेव और वापस पा सके जिसका इस्तेमाल वह अपना काम करने के लिए करता है. इसके बजाय, वह उस डेटा का इस्तेमाल करता है जो खास तौर पर एंड यूज़र के पास होता है. अनुमति देने के इस तरीके का इस्तेमाल, क्लाइंट ऐप्लिकेशन और ऑथराइज़ेशन सर्वर के बीच ही किया जाता है. एंड यूज़र, इस तरह की अनुमति देने वाले फ़्लो में हिस्सा नहीं लेता.

भूमिकाएं

भूमिकाएं, OAuth फ़्लो में हिस्सा लेने वाले "ऐक्टर" के बारे में बताती हैं. आइए, क्लाइंट क्रेडेंशियल की भूमिकाओं के बारे में खास जानकारी देखें, ताकि यह पता चल सके कि Apigee Edge कहां काम आता है. OAuth 2.0 की भूमिकाओं के बारे में पूरी जानकारी पाने के लिए, IETF OAuth 2.0 की खास बातें देखें.

  • क्लाइंट ऐप्लिकेशन -- वह ऐप्लिकेशन जिसे उपयोगकर्ता के सुरक्षित संसाधनों का ऐक्सेस चाहिए. आम तौर पर, इस फ़्लो में ऐप्लिकेशन, उपयोगकर्ता के लैपटॉप या डिवाइस पर स्थानीय तौर पर चलने के बजाय सर्वर पर चलता है.
  • Apigee Edge -- इस फ़्लो में, Apigee Edge, OAuth की मदद से अनुमति देने वाला सर्वर है. इसकी भूमिका, ऐक्सेस टोकन जनरेट करना, ऐक्सेस टोकन की पुष्टि करना, और सुरक्षित संसाधनों के लिए अनुमति वाले अनुरोधों को संसाधन सर्वर पर भेजना है.
  • संसाधन सर्वर -- यह बैकएंड सेवा है, जो सुरक्षित डेटा को सेव करती है. क्लाइंट ऐप्लिकेशन को इस डेटा को ऐक्सेस करने की अनुमति चाहिए होती है. अगर Apigee Edge पर होस्ट की गई एपीआई प्रॉक्सी को सुरक्षित किया जा रहा है, तो Apigee Edge भी संसाधन सर्वर है.

कोड सैंपल

आपको GitHub पर, क्लाइंट क्रेडेंशियल ग्रांट टाइप के सैंपल को लागू करने का पूरा तरीका मिल सकता है. ज़्यादा उदाहरणों के लिंक के लिए, यहां दिए गए अन्य संसाधन देखें.

फ़्लो डायग्राम

यहां दिए गए फ़्लो डायग्राम में, क्लाइंट क्रेडेंशियल फ़्लो के बारे में बताया गया है. इसमें Apigee Edge को अनुमति देने वाले सर्वर के तौर पर इस्तेमाल किया गया है. आम तौर पर, इस फ़्लो में Edge भी संसाधन सर्वर होता है. इसका मतलब है कि एपीआई प्रॉक्सी, सुरक्षित संसाधन होती हैं.


क्लाइंट क्रेडेंशियल फ़्लो में शामिल चरण

यहां क्लाइंट क्रेडेंशियल कोड ग्रांट टाइप को लागू करने के लिए ज़रूरी चरणों की खास जानकारी दी गई है. इसमें Apigee Edge, अनुमति देने वाले सर्वर के तौर पर काम करता है. ध्यान रखें कि इस फ़्लो में, क्लाइंट ऐप्लिकेशन सिर्फ़ अपना क्लाइंट आईडी और क्लाइंट सीक्रेट दिखाता है. अगर ये मान्य हैं, तो Apigee Edge एक ऐक्सेस टोकन दिखाता है.

ज़रूरी शर्त: क्लाइंट ऐप्लिकेशन को Apigee Edge के साथ रजिस्टर करना होगा, ताकि क्लाइंट आईडी और क्लाइंट सीक्रेट कुंजियां मिल सकें. ज़्यादा जानकारी के लिए, क्लाइंट ऐप्लिकेशन रजिस्टर करना लेख पढ़ें.

1. क्लाइंट, ऐक्सेस टोकन का अनुरोध करता है

ऐक्सेस टोकन पाने के लिए, क्लाइंट, Edge को एक एपीआई कॉल पोस्ट करता है. इसमें, रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिले क्लाइंट आईडी और क्लाइंट सीक्रेट की वैल्यू शामिल होती हैं. इसके अलावा, grant_type=client_credentials पैरामीटर को क्वेरी पैरामीटर के तौर पर पास करना ज़रूरी है. (हालांकि, इस पैरामीटर को अनुरोध के हेडर या बॉडी में स्वीकार करने के लिए, OAuthV2 नीति को कॉन्फ़िगर किया जा सकता है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें).

उदाहरण के लिए:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials&client_id=ns4fQc14Zg4hKFCNaSzArVuwszX95X&client_secret=ZIjFyTsNgQNyxI'

ध्यान दें: ऊपर दिखाए गए तरीके से, client_id और client_secret वैल्यू को क्वेरी पैरामीटर के तौर पर पास किया जा सकता है. हालांकि, इन्हें Authorization हेडर में base64 यूआरएल के तौर पर एन्कोड की गई स्ट्रिंग के तौर पर पास करना सबसे सही तरीका है. इसके लिए, आपको base64 एन्कोडिंग टूल या यूटिलिटी का इस्तेमाल करके, दोनों वैल्यू को एक साथ कोड में बदलना होगा. साथ ही, उनके बीच में कोलन लगाना होगा. इस तरह: aBase64EncodeFunction(clientidvalue:clientsecret). इसलिए, ऊपर दिए गए उदाहरण को इस तरह से कोड में बदला जाएगा:

result = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // Note the colon separating the two values.

ऊपर दी गई स्ट्रिंग को base64 में एन्कोड करने पर यह नतीजा मिलता है: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

इसके बाद, टोकन का अनुरोध इस तरह करें:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg=='

2. Edge, क्रेडेंशियल की पुष्टि करता है

ध्यान दें कि एपीआई कॉल को /accesstoken एंडपॉइंट पर भेजा जाता है. इस एंडपॉइंट से एक नीति जुड़ी हुई है. यह नीति, ऐप्लिकेशन के क्रेडेंशियल की पुष्टि करती है. इसका मतलब है कि यह नीति, सबमिट की गई कुंजियों की तुलना उन कुंजियों से करती है जिन्हें ऐप्लिकेशन रजिस्टर करते समय Apigee Edge ने बनाया था. अगर आपको Edge पर OAuth एंडपॉइंट के बारे में ज़्यादा जानना है, तो OAuth एंडपॉइंट और नीतियां कॉन्फ़िगर करना लेख पढ़ें.

3. Edge जवाब देता है

अगर क्रेडेंशियल सही हैं, तो Edge क्लाइंट को ऐक्सेस टोकन भेजता है. अगर ऐसा नहीं होता है, तो गड़बड़ी का मैसेज दिखता है.

4. क्लाइंट, प्रोटेक्टेड एपीआई को कॉल करता है

अब, मान्य ऐक्सेस टोकन की मदद से क्लाइंट, सुरक्षित किए गए एपीआई को कॉल कर सकता है. इस सिनेरियो में, Apigee Edge (प्रॉक्सी) से अनुरोध किए जाते हैं. Edge की यह ज़िम्मेदारी होती है कि वह ऐक्सेस टोकन की पुष्टि करे. इसके बाद, वह एपीआई कॉल को टारगेट रिसॉर्स सर्वर को पास करे. उदाहरण के लिए, नीचे सुरक्षित एपीआई को कॉल करना देखें.

फ़्लो और नीतियां कॉन्फ़िगर करना

ऑथराइज़ेशन सर्वर के तौर पर Edge, ऐक्सेस टोकन के अनुरोधों को प्रोसेस करता है. एपीआई डेवलपर के तौर पर, आपको टोकन के अनुरोधों को मैनेज करने के लिए, कस्टम फ़्लो वाला प्रॉक्सी बनाना होगा. साथ ही, OAuthV2 नीति को जोड़ना और कॉन्फ़िगर करना होगा. इस सेक्शन में, उस एंडपॉइंट को कॉन्फ़िगर करने का तरीका बताया गया है.

कस्टम फ़्लो कॉन्फ़िगरेशन

एपीआई प्रॉक्सी फ़्लो को कॉन्फ़िगर करने का तरीका दिखाने का सबसे आसान तरीका, एक्सएमएल फ़्लो की परिभाषा दिखाना है. यहां एपीआई प्रॉक्सी फ़्लो का एक उदाहरण दिया गया है. इसे ऐक्सेस टोकन के अनुरोध को प्रोसेस करने के लिए डिज़ाइन किया गया है. उदाहरण के लिए, जब कोई अनुरोध आता है और पाथ सफ़िक्स /accesstoken से मेल खाता है, तो GetAccessToken नीति ट्रिगर हो जाती है. इस तरह का कस्टम फ़्लो बनाने के लिए ज़रूरी चरणों की खास जानकारी पाने के लिए, OAuth एंडपॉइंट और नीतियां कॉन्फ़िगर करना लेख पढ़ें.

<Flows>
  <Flow name="GetAccessToken">
         <!-- This policy flow is triggered when the URI path suffix
         matches /oauth/accesstoken. Publish this URL to app developers 
         to use when obtaining an access token using an auth code   
         -->
    <Condition>proxy.pathsuffix == "/oauth/accesstoken"</Condition>
    <Request>
        <Step><Name>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

किसी नीति के साथ फ़्लो को कॉन्फ़िगर करना

आपको एंडपॉइंट से नीति अटैच करनी होगी. इसके लिए, यह तरीका अपनाएं. प्रॉक्सी एंडपॉइंट में OAuthV2 नीति जोड़ने के लिए ज़रूरी चरणों की खास जानकारी पाने के लिए, OAuth एंडपॉइंट और नीतियां कॉन्फ़िगर करना लेख पढ़ें.

ऐक्सेस टोकन पाना

यह नीति, /accesstoken पाथ से जुड़ी है. यह GenerateAccessToken ऑपरेशन के साथ OAuthV2 नीति का इस्तेमाल करता है.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

ऐक्सेस टोकन पाने के लिए एपीआई कॉल, POST होता है. इसमें base64 एन्कोड किया गया client_id + client+secret के साथ-साथ, grant_type=client_credentials क्वेरी पैरामीटर वाला Authorization हेडर शामिल होता है. इसमें स्कोप और स्थिति के लिए वैकल्पिक पैरामीटर भी शामिल किए जा सकते हैं. जैसे:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVgT1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ'

ऐक्सेस टोकन की पुष्टि करने से जुड़ी नीति अटैच करना

OAuth 2.0 की सुरक्षा की मदद से अपने एपीआई को सुरक्षित रखने के लिए, आपको VerifyAccessToken ऑपरेशन के साथ OAuthV2 नीति जोड़नी होगी. यह नीति यह जांच करती है कि आने वाले अनुरोधों में मान्य ऐक्सेस टोकन है या नहीं. अगर टोकन मान्य है, तो Edge अनुरोध को प्रोसेस करता है. अगर यह मान्य नहीं है, तो Edge गड़बड़ी का मैसेज दिखाता है. बुनियादी चरणों के लिए, ऐक्सेस टोकन की पुष्टि करना लेख पढ़ें.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

सुरक्षित एपीआई को कॉल करना

OAuth 2.0 की सुरक्षा से सुरक्षित किसी एपीआई को कॉल करने के लिए, आपको एक मान्य ऐक्सेस टोकन देना होगा. टोकन को Authorization हेडर में शामिल करने का सही तरीका यह है: ध्यान दें कि ऐक्सेस टोकन को "Bearer टोकन" भी कहा जाता है.

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282 

ऐक्सेस टोकन भेजना भी देखें.

अन्य संसाधन

  • Apigee, एपीआई डेवलपर के लिए ऑनलाइन ट्रेनिंग उपलब्ध कराता है. इसमें एपीआई सुरक्षा से जुड़ा एक कोर्स भी शामिल है. इसमें OAuth भी शामिल है.
  • OAuthV2 नीति -- इसमें कई उदाहरण दिए गए हैं. इनसे पता चलता है कि अनुमति देने वाले सर्वर से अनुरोध कैसे किए जाते हैं और OAuthV2 नीति को कैसे कॉन्फ़िगर किया जाता है.