आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं. जानकारी
इस विषय में, हम आपको ऐक्सेस टोकन और ऑथराइज़ेशन कोड का अनुरोध करने, OAuth 2.0 एंडपॉइंट कॉन्फ़िगर करने, और हर तरह के ग्रांट के लिए नीतियां कॉन्फ़िगर करने का तरीका बताएंगे.
सैंपल कोड
आपकी सुविधा के लिए, इस विषय में बताई गई नीतियां और एंडपॉइंट, GitHub पर उपलब्ध हैं. ये Apigee api-platform-samples रिपॉज़िटरी में oauth-doc-examples प्रोजेक्ट में उपलब्ध हैं. इस विषय में दिखाए गए सैंपल कोड को डिप्लॉय किया जा सकता है. साथ ही, सैंपल अनुरोधों को आज़माया जा सकता है. ज़्यादा जानकारी के लिए, प्रोजेक्ट का README देखें.
ऐक्सेस टोकन का अनुरोध करना: ऑथराइज़ेशन कोड के लिए अनुमति का टाइप
इस सेक्शन में, ऑथराइज़ेशन कोड ग्रांट टाइप वाले फ़्लो का इस्तेमाल करके ऐक्सेस टोकन का अनुरोध करने का तरीका बताया गया है. OAuth 2.0 के इस्तेमाल की अनुमति के टाइप के बारे में जानने के लिए, OAuth 2.0 के बारे में जानकारी लेख पढ़ें.
अनुरोध का सैंपल
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
ज़रूरी पैरामीटर
डिफ़ॉल्ट रूप से, इन पैरामीटर को x-www-form-urlencoded पर सेट किया जाना चाहिए और अनुरोध के मुख्य हिस्से में बताया जाना चाहिए. जैसा कि ऊपर दिए गए सैंपल में दिखाया गया है. हालांकि, इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. इसके लिए, इस /accesstoken एंडपॉइंट से जुड़ी OAuthV2 नीति में <GrantType>, <Code>, और <RedirectUri> एलिमेंट को कॉन्फ़िगर करें. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
- grant_type - इसे
authorization_codeवैल्यू पर सेट करना ज़रूरी है. - code - यह
/authorizeएंडपॉइंट से मिला ऑथराइज़ेशन कोड है. हालांकि, इसे कोई भी नाम दिया जा सकता है. ऑथराइज़ेशन कोड ग्रांट टाइप फ़्लो में ऐक्सेस टोकन का अनुरोध करने के लिए, आपको पहले ऑथराइज़ेशन कोड पाना होगा. ऑथराइज़ेशन कोड का अनुरोध करना लेख पढ़ें. ऑथराइज़ेशन कोड के लिए अनुमति देने का तरीका लागू करना भी देखें. - redirect_uri - अगर पिछले ऑथराइज़ेशन कोड के अनुरोध में
redirect_uriपैरामीटर शामिल किया गया था, तो आपको यह पैरामीटर देना होगा. अगर ऑथराइज़ेशन कोड के अनुरोध मेंredirect_uriपैरामीटर शामिल नहीं किया गया था और आपने यह पैरामीटर नहीं दिया है, तो यह नीति कॉलबैक यूआरएल की उस वैल्यू का इस्तेमाल करती है जो डेवलपर ऐप्लिकेशन रजिस्टर करते समय दी गई थी.
वैकल्पिक पैरामीटर
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को बेसिक ऑथेंटिकेशन हेडर (Base64-encoded) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. आपको ये वैल्यू, रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिलती हैं. "बुनियादी पुष्टि करने के क्रेडेंशियल को एन्कोड करना" भी देखें.
सैंपल एंडपॉइंट
ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का एक सैंपल दिया गया है. यह GenerateAccessToken नीति को लागू करेगा. इसे authorization_code grant type के साथ काम करने के लिए कॉन्फ़िगर किया जाना चाहिए.
...
<Flow name="generate-access-token">
<Description>Generate a token</Description>
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...नीति का सैंपल
यह GenerateAccessToken की बुनियादी नीति है. इसे authorization_code ग्रांट टाइप को स्वीकार करने के लिए कॉन्फ़िगर किया गया है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले कॉन्फ़िगरेशन के वैकल्पिक एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn>
<RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
<SupportedGrantTypes>
<GrantType>authorization_code</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति एक JSON रिस्पॉन्स देती है. इसमें ऐक्सेस टोकन शामिल होता है, जैसा कि यहां दिखाया गया है. authorization_code ग्रांट टाइप, ऐक्सेस टोकन और रीफ़्रेश टोकन बनाता है. इसलिए, जवाब ऐसा दिख सकता है:
{ "issued_at": "1420262924658", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420262924658", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi", "organization_name": "docs", "refresh_token_expires_in": "86399", //--in seconds "refresh_count": "0" }
अगर <GenerateResponse> को 'गलत है' पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती. इसके बजाय, यह फ़्लो वैरिएबल के इस सेट में, ऐक्सेस टोकन के लिए अनुमति से जुड़ा डेटा भरता है.
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_statusउदाहरण के लिए:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
ऐक्सेस टोकन का अनुरोध करना: क्लाइंट क्रेडेंशियल ग्रांट टाइप
इस सेक्शन में, क्लाइंट क्रेडेंशियल ग्रांट टाइप फ़्लो का इस्तेमाल करके ऐक्सेस टोकन का अनुरोध करने का तरीका बताया गया है. OAuth 2.0 के इस्तेमाल की अनुमति के टाइप के बारे में जानने के लिए, OAuth 2.0 के बारे में जानकारी लेख पढ़ें.
अनुरोध का सैंपल
नीचे दिए गए कॉल में, बुनियादी पुष्टि करने वाले हेडर को एन्कोड करने के बारे में जानकारी पाने के लिए, "बुनियादी पुष्टि करने वाले क्रेडेंशियल को एन्कोड करना" लेख पढ़ें.
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
ज़रूरी पैरामीटर
डिफ़ॉल्ट रूप से, grant_type पैरामीटर x-www-form-urlencoded होना चाहिए. साथ ही, इसे अनुरोध के मुख्य हिस्से में शामिल किया जाना चाहिए. जैसा कि ऊपर दिए गए सैंपल में दिखाया गया है. हालांकि, इस डिफ़ॉल्ट वैल्यू को बदला जा सकता है. इसके लिए, OAuthV2 नीति में <GrantType> एलिमेंट को कॉन्फ़िगर करें. यह नीति, इस /accesstoken एंडपॉइंट से जुड़ी होती है. उदाहरण के लिए, क्वेरी पैरामीटर में पैरामीटर पास किया जा सकता है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
- grant_type - इसे
client_credentialsवैल्यू पर सेट करना ज़रूरी है.
वैकल्पिक पैरामीटर
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को बेसिक ऑथेंटिकेशन हेडर (Base64-encoded) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. आपको ये वैल्यू, अनुरोध से जुड़े रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिलती हैं. "बुनियादी पुष्टि करने के क्रेडेंशियल को एन्कोड करना" भी देखें.
सैंपल एंडपॉइंट
ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का एक सैंपल दिया गया है. यह GenerateAccessToken नीति को लागू करेगा. इसे client_credentials grant type के साथ काम करने के लिए कॉन्फ़िगर किया जाना चाहिए.
...
<Flow name="generate-access-token">
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...नीति का सैंपल
यह GenerateAccessToken की बुनियादी नीति है. इसे client_credentials ग्रांट टाइप को स्वीकार करने के लिए कॉन्फ़िगर किया गया है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले कॉन्फ़िगरेशन के वैकल्पिक एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<SupportedGrantTypes>
<GrantType>client_credentials</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति के उल्लंघन की जानकारी देने वाले JSON रिस्पॉन्स मिलते हैं. ध्यान दें कि client_credentials ग्रांट टाइप के साथ, रीफ़्रेश टोकन काम नहीं करते. सिर्फ़ ऐक्सेस टोकन मिंट किया जाता है. उदाहरण के लिए:
{ "issued_at": "1420260525643", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav", "organization_name": "docs" }
अगर <GenerateResponse> को 'गलत है' पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती. इसके बजाय, यह फ़्लो वैरिएबल के इस सेट में, ऐक्सेस टोकन के लिए अनुमति से जुड़ा डेटा भरता है.
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in secondsउदाहरण के लिए:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
ऐक्सेस टोकन का अनुरोध करना: पासवर्ड ग्रांट टाइप
इस सेक्शन में, संसाधन के मालिक के पासवर्ड क्रेडेंशियल (पासवर्ड) के आधार पर अनुमति देने के फ़्लो का इस्तेमाल करके, ऐक्सेस टोकन का अनुरोध करने का तरीका बताया गया है. OAuth 2.0 के इस्तेमाल की अनुमति के टाइप के बारे में जानने के लिए, OAuth 2.0 के बारे में जानकारी लेख पढ़ें.
पासवर्ड ग्रांट टाइप के बारे में ज़्यादा जानने के लिए, पासवर्ड ग्रांट टाइप लागू करना लेख पढ़ें. इसमें चार मिनट का एक वीडियो भी शामिल है, जिसमें इसे लागू करने का तरीका बताया गया है.
अनुरोध का सैंपल
नीचे दिए गए कॉल में, बुनियादी पुष्टि करने वाले हेडर को एन्कोड करने के बारे में जानकारी पाने के लिए, "बुनियादी पुष्टि करने वाले क्रेडेंशियल को एन्कोड करना" लेख पढ़ें.
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST https://docs-test.apigee.net/oauth/token \ -d 'grant_type=password&username=the-user-name&password=the-users-password'
ज़रूरी पैरामीटर
डिफ़ॉल्ट रूप से, इन पैरामीटर को x-www-form-urlencoded पर सेट किया जाना चाहिए और अनुरोध के मुख्य हिस्से में बताया जाना चाहिए. जैसा कि ऊपर दिए गए सैंपल में दिखाया गया है. हालांकि, इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. इसके लिए, इस /token एंडपॉइंट से जुड़ी OAuthV2 नीति में <GrantType>, <Username>, और <Password> एलिमेंट को कॉन्फ़िगर करें. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
आम तौर पर, उपयोगकर्ता के क्रेडेंशियल की पुष्टि, क्रेडेंशियल स्टोर के ख़िलाफ़ की जाती है. इसके लिए, एलडीएपी या JavaScript नीति का इस्तेमाल किया जाता है.
- grant_type - इसे
passwordवैल्यू पर सेट किया जाना चाहिए. - username - संसाधन के मालिक का उपयोगकर्ता नाम.
- password - संसाधन के मालिक का पासवर्ड.
वैकल्पिक पैरामीटर
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को बेसिक ऑथेंटिकेशन हेडर (Base64-encoded) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. आपको ये वैल्यू, अनुरोध से जुड़े रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिलती हैं. "बुनियादी पुष्टि करने के क्रेडेंशियल को एन्कोड करना" भी देखें.
सैंपल एंडपॉइंट
ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का एक सैंपल दिया गया है. यह GenerateAccessToken नीति को लागू करेगा. इसे पासवर्ड ग्रांट टाइप के साथ काम करने के लिए कॉन्फ़िगर किया जाना चाहिए.
...
<Flow name="generate-access-token">
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
</Flow>
...नीति का सैंपल
यह GenerateAccessToken की बुनियादी नीति है. इसे पासवर्ड ग्रांट टाइप को स्वीकार करने के लिए कॉन्फ़िगर किया गया है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले वैकल्पिक कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
<SupportedGrantTypes>
<GrantType>password</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति के उल्लंघन की जानकारी देने वाले JSON रिस्पॉन्स मिलते हैं. ध्यान दें कि पासवर्ड ग्रांट टाइप के साथ, ऐक्सेस टोकन और रीफ़्रेश टोकन, दोनों बनाए जाते हैं.
जैसे:
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "0" }
अगर <GenerateResponse> को 'गलत है' पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती. इसके बजाय, यह फ़्लो वैरिएबल के इस सेट में, ऐक्सेस टोकन के लिए अनुमति से जुड़ा डेटा भरता है.
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_statusउदाहरण के लिए:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
ऐक्सेस टोकन का अनुरोध करना: इंप्लिसिट ग्रांट टाइप
इस सेक्शन में, इंप्लिसिट ग्रांट टाइप फ़्लो का इस्तेमाल करके ऐक्सेस टोकन का अनुरोध करने का तरीका बताया गया है. OAuth 2.0 के इस्तेमाल की अनुमति के टाइप के बारे में जानने के लिए, OAuth 2.0 के बारे में जानकारी लेख पढ़ें.
अनुरोध का सैंपल
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'
ज़रूरी पैरामीटर
डिफ़ॉल्ट रूप से, ये पैरामीटर क्वेरी पैरामीटर होने चाहिए. जैसा कि ऊपर दिए गए सैंपल में दिखाया गया है. हालांकि,
इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. इसके लिए, <ResponseType>,
<ClientId>, और <RedirectUri> एलिमेंट को कॉन्फ़िगर करें. ये एलिमेंट, OAuthV2 नीति में मौजूद होते हैं. यह नीति, इस /token एंडपॉइंट से जुड़ी होती है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
आम तौर पर, उपयोगकर्ता क्रेडेंशियल की पुष्टि, क्रेडेंशियल स्टोर के ख़िलाफ़ की जाती है. इसके लिए, LDAP सेवा कॉलआउट या JavaScript नीति का इस्तेमाल किया जाता है.
- response_type - इसे
tokenवैल्यू पर सेट करना ज़रूरी है. - client_id - यह रजिस्टर किए गए डेवलपर ऐप्लिकेशन का क्लाइंट आईडी होता है.
- redirect_uri - अगर क्लाइंट डेवलपर ऐप्लिकेशन रजिस्टर करते समय कॉलबैक यूआरआई नहीं दिया गया था, तो यह पैरामीटर ज़रूरी है. अगर क्लाइंट के रजिस्ट्रेशन के समय कोई कॉलबैक यूआरएल दिया गया था, तो उसकी तुलना इस वैल्यू से की जाएगी. यह वैल्यू, कॉलबैक यूआरएल से पूरी तरह मेल खानी चाहिए.
वैकल्पिक पैरामीटर
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
इंप्लिसिट ग्रांट के लिए, सामान्य पुष्टि करने की ज़रूरत नहीं होती. आपको अनुरोध पैरामीटर के तौर पर क्लाइंट आईडी पास करना होगा. इसके बारे में यहां बताया गया है.
सैंपल एंडपॉइंट
ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का एक सैंपल दिया गया है. यह GenerateAccessTokenImplicitGrant नीति को लागू करेगा.
... <Flow name="generate-access-token-implicit"> <Request> <Step> <Name>GenerateAccessTokenImplicitGrant</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition> </Flow> ...
नीति का सैंपल
यह GenerateAccessTokenImplicitGrant की बुनियादी नीति है. यह नीति, इंप्लिसिट ग्रांट टाइप फ़्लो के लिए टोकन के अनुरोधों को प्रोसेस करती है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले वैकल्पिक कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
<DisplayName>GenerateAccessTokenImplicit</DisplayName>
<Operation>GenerateAccessTokenImplicitGrant</Operation>
<GenerateResponse enabled="true"/>
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति रिस्पॉन्स हेडर में 302 लोकेशन रीडायरेक्ट दिखाती है. रीडायरेक्ट, redirect_uri पैरामीटर में दिए गए यूआरएल पर ले जाता है. साथ ही, इसमें ऐक्सेस टोकन और टोकन के खत्म होने का समय भी शामिल होता है. ध्यान दें कि इंप्लिसिट ग्रांट टाइप में रीफ़्रेश टोकन काम नहीं करते. उदाहरण के लिए:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
अगर <GenerateResponse> को 'गलत है' पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती. इसके बजाय, यह फ़्लो वैरिएबल के इस सेट में, ऐक्सेस टोकन के लिए अनुमति से जुड़ा डेटा भरता है.
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in secondsउदाहरण के लिए:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
ऑथराइज़ेशन कोड का अनुरोध करना
अगर ऑथराइज़ेशन कोड ग्रांट टाइप फ़्लो का इस्तेमाल किया जा रहा है, तो ऐक्सेस टोकन का अनुरोध करने से पहले, आपको ऑथराइज़ेशन कोड पाना होगा.
अनुरोध का उदाहरण
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'
यहां /oauth/authorize प्रॉक्सी एंडपॉइंट पर OAuthV2 GenerateAuthorizationCode नीति अटैच की जाती है. नीचे सैंपल एंडपॉइंट देखें.
ज़रूरी पैरामीटर
डिफ़ॉल्ट रूप से, ये पैरामीटर क्वेरी पैरामीटर होने चाहिए. जैसा कि ऊपर दिए गए सैंपल में दिखाया गया है. हालांकि,
इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. इसके लिए, <ResponseType>,
<ClientId>, और <RedirectUri> एलिमेंट को कॉन्फ़िगर करें. ये एलिमेंट, OAuthV2 नीति में मौजूद होते हैं. यह नीति, इस /authorize एंडपॉइंट से जुड़ी होती है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
- response_type - इसे
codeवैल्यू पर सेट करना ज़रूरी है. - client_id - यह रजिस्टर किए गए डेवलपर ऐप्लिकेशन का क्लाइंट आईडी होता है.
वैकल्पिक पैरामीटर
- redirect_uri - अगर रजिस्टर किए गए क्लाइंट ऐप्लिकेशन में पूरा (आंशिक नहीं) कॉलबैक यूआरआई दिया गया है, तो यह पैरामीटर ज़रूरी नहीं है. हालांकि, ऐसा न होने पर यह पैरामीटर ज़रूरी है. कॉलबैक, वह यूआरएल होता है जहां Edge, नया ऑथराइज़ेशन कोड भेजता है. ऐप्लिकेशन रजिस्टर करना और एपीआई पासकोड मैनेज करना लेख भी पढ़ें.
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
इसके लिए, बुनियादी पुष्टि की ज़रूरत नहीं होती. हालांकि, रजिस्टर किए गए क्लाइंट ऐप्लिकेशन का क्लाइंट आईडी, अनुरोध में शामिल किया जाना चाहिए.
सैंपल एंडपॉइंट
ऑथराइज़ेशन कोड जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का सैंपल दिया गया है:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <!-- ExpiresIn, in milliseconds. The ref is optional. The explicitly specified value is the default, when the variable reference cannot be resolved. 60000 = 1 minute 120000 = 2 minutes --> <ExpiresIn>60000</ExpiresIn> <GenerateResponse enabled="true"/> </OAuthV2>
नीति का सैंपल
यह GenerateAuthorizationCode की बुनियादी नीति है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले वैकल्पिक कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<OAuthV2 name="GenerateAuthorizationCode">
<Operation>GenerateAuthorizationCode</Operation>
<GenerateResponse enabled="true"/>
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति ?code क्वेरी पैरामीटर को redirect_uri (कॉलबैक यूआरआई) लोकेशन पर भेजती है. इसमें ऑथराइज़ेशन कोड अटैच होता है. इसे 302 ब्राउज़र रीडायरेक्ट के ज़रिए भेजा जाता है. इसमें, जवाब के लोकेशन हेडर में यूआरएल होता है. उदाहरण के लिए: ?code=123456.
अगर <GenerateResponse> को false पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती. इसके बजाय, यह फ़्लो वैरिएबल के इस सेट में, ऑथराइज़ेशन कोड से जुड़ा डेटा भरता है.
oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_idउदाहरण के लिए:
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
ऐक्सेस टोकन रीफ़्रेश करना
रीफ़्रेश टोकन एक क्रेडेंशियल होता है. इसका इस्तेमाल ऐक्सेस टोकन पाने के लिए किया जाता है. आम तौर पर, इसका इस्तेमाल तब किया जाता है, जब ऐक्सेस टोकन की समयसीमा खत्म हो जाती है या वह अमान्य हो जाता है. ऐक्सेस टोकन मिलने पर, रीफ़्रेश टोकन को जवाब में दिखाया जाता है.
रीफ़्रेश टोकन का इस्तेमाल करके, नए ऐक्सेस टोकन का अनुरोध करने के लिए:
अनुरोध का उदाहरण
नीचे दिए गए कॉल में, बुनियादी पुष्टि करने वाले हेडर को एन्कोड करने के बारे में जानकारी पाने के लिए, "बुनियादी पुष्टि करने वाले क्रेडेंशियल को एन्कोड करना" लेख पढ़ें.
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \ -d 'grant_type=refresh_token&refresh_token=my-refresh-token'
ज़रूरी पैरामीटर
- grant_type - इसे
refresh_tokenवैल्यू पर सेट किया जाना चाहिए. - refresh_token - यह वह रीफ़्रेश टोकन है जो उस ऐक्सेस टोकन से जुड़ा है जिसे आपको रिन्यू करना है.
डिफ़ॉल्ट रूप से, नीति अनुरोध के मुख्य हिस्से में बताए गए x-www-form-urlencoded पैरामीटर के तौर पर इनकी जांच करती है. इसके बारे में, ऊपर दिए गए उदाहरण में दिखाया गया है. इन इनपुट के लिए, किसी दूसरी जगह की जानकारी को कॉन्फ़िगर करने के लिए, OAuthV2 नीति में <GrantType> और <RefreshToken> एलिमेंट का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.
वैकल्पिक पैरामीटर
- state - यह एक स्ट्रिंग होती है, जिसे जवाब के साथ वापस भेजा जाता है. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोधों को रोकने के लिए किया जाता है.
- scope - इसकी मदद से, एपीआई प्रॉडक्ट की उस सूची को फ़िल्टर किया जा सकता है जिसमें मिंट किए गए टोकन का इस्तेमाल किया जा सकता है. स्कोप के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप का इस्तेमाल करना लेख पढ़ें.
पुष्टि करना
- client_id
- client_secret
आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को बेसिक ऑथेंटिकेशन हेडर (Base64-encoded) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. "पुष्टि करने के लिए बुनियादी क्रेडेंशियल को एन्कोड करना" भी देखें.
ऐक्सेस टोकन को रीफ़्रेश करते समय, उपयोगकर्ता की फिर से पुष्टि नहीं की जाती.
रीफ़्रेश टोकन का इस्तेमाल करके ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का एक उदाहरण दिया गया है. यह RefreshAccessToken नीति को लागू करेगा.
...
<Flow name="generate-refresh-token">
<Request>
<Step>
<Name>RefreshAccessToken</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
</Flow>
...नीति का सैंपल
यह RefreshAccessToken की बुनियादी नीति है. इसे refresh_token ग्रांट टाइप को स्वीकार करने के लिए कॉन्फ़िगर किया गया है. इस नीति के साथ कॉन्फ़िगर किए जा सकने वाले वैकल्पिक कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी पाने के लिए, OAuthV2 नीति देखें.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
<Operation>RefreshAccessToken</Operation>
<GenerateResponse enabled="true"/>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>लौटाए गए सामान की कुल कीमत
<GenerateResponse> चालू होने पर, नीति एक JSON रिस्पॉन्स दिखाती है. इसमें नया ऐक्सेस टोकन होता है. refresh_token ग्रांट टाइप, ऐक्सेस टोकन और नए रीफ़्रेश टोकन, दोनों को मिंट करने की सुविधा देता है. उदाहरण के लिए:
{ "issued_at": "1420301470489", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "refresh_token_issued_at": "1420301470489", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "token_type": "BearerToken", "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "2" }
आपको पता होना चाहिए कि नया रीफ़्रेश टोकन जनरेट होने के बाद, ओरिजनल टोकन मान्य नहीं रहता.
अगर <GenerateResponse> को 'सही है' पर सेट किया गया है, तो आपको ऊपर दिया गया जवाब मिलेगा.
अगर <GenerateResponse> को 'गलत है' पर सेट किया जाता है, तो नीति कोई जवाब नहीं देती है.
इसके बजाय, यह कॉन्टेक्स्ट (फ़्लो) वैरिएबल के इस सेट में, ऐक्सेस टोकन के लिए अनुमति से जुड़ा डेटा भरता है.
oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_statusउदाहरण के लिए:
oauthv2accesstoken.RefreshAccessToken.access_token oauthv2accesstoken.RefreshAccessToken.expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at oauthv2accesstoken.RefreshAccessToken.refresh_token_status
पुष्टि करने के बुनियादी क्रेडेंशियल को कोड में बदलना
जब टोकन या ऑथराइज़ेशन कोड का अनुरोध करने के लिए एपीआई कॉल किया जाता है, तो client_id और client_secret वैल्यू को एचटीटीपी-बेसिक पुष्टि करने वाले हेडर के तौर पर पास करना एक अच्छा तरीका है. साथ ही, OAuth 2.0 के स्पेसिफ़िकेशन में भी ऐसा करने का सुझाव दिया गया है. इसके बारे में IETF RFC 2617 में बताया गया है. इसके लिए, आपको दो वैल्यू को एक साथ जोड़कर, उनके बीच में कॉलन लगाकर, base64-encode करना होगा.
pseudo-code में:
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))इस उदाहरण में, ns4fQc14Zg4hKFCNaSzArVuwszX95X client_id है और ZIjFyTsNgQNyxI क्लाइंट सीक्रेट है.
base64 फ़ॉर्मैट में कोड में बदली गई वैल्यू का हिसाब लगाने के लिए, जिस भी प्रोग्रामिंग लैंग्वेज का इस्तेमाल किया जाता है उसके लिए, दिए गए क्लाइंट क्रेडेंशियल के लिए base64 फ़ॉर्मैट में कोड में बदली गई वैल्यू यह है:
bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==
इसके बाद, टोकन का अनुरोध इस तरह किया जा सकता है:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
अगर -u विकल्प का इस्तेमाल किया जाता है, तो curl यूटिलिटी आपके लिए एचटीटीपी बेसिक हेडर बनाएगी. ऊपर दिए गए फ़ॉर्मूले के बराबर यह फ़ॉर्मूला है:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
अन्य प्रोग्रामिंग एनवायरमेंट में भी ऐसे शॉर्टकट हो सकते हैं जो base64-encoded हेडर को अपने-आप जनरेट करते हैं.
डेटाबेस में टोकन हैश करना
डेटाबेस की सुरक्षा में सेंध लगने पर, OAuth ऐक्सेस और रीफ़्रेश टोकन को सुरक्षित रखने के लिए, अपने Edge संगठन में टोकन हैशिंग की सुविधा अपने-आप चालू होने की सुविधा चालू की जा सकती है. यह सुविधा चालू होने पर, Edge आपके तय किए गए एल्गोरिदम का इस्तेमाल करके, नए जनरेट किए गए OAuth ऐक्सेस और रीफ़्रेश टोकन का हैश किया गया वर्शन अपने-आप बना देता है. (मौजूदा टोकन को एक साथ हैश करने के बारे में जानकारी यहां दी गई है.) एपीआई कॉल में, हैश नहीं किए गए टोकन का इस्तेमाल किया जाता है. साथ ही, Edge डेटाबेस में मौजूद हैश किए गए वर्शन के हिसाब से उनकी पुष्टि करता है.
संगठन-लेवल की ये प्रॉपर्टी, OAuth टोकन हैशिंग को कंट्रोल करती हैं.
features.isOAuthTokenHashingEnabled = true features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
अगर आपके पास पहले से हैश किए गए टोकन हैं और आपको उन्हें तब तक बनाए रखना है, जब तक उनकी समयसीमा खत्म नहीं हो जाती, तो अपने संगठन में यहां दी गई प्रॉपर्टी सेट करें. इनमें हैशिंग एल्गोरिदम, मौजूदा एल्गोरिदम से मेल खाता है. उदाहरण के लिए, SHA1, Edge का डिफ़ॉल्ट एल्गोरिदम. अगर टोकन हैश नहीं किए गए थे, तो PLAIN का इस्तेमाल करें.
features.isOAuthTokenFallbackHashingEnabled = true features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
अगर आप Edge Cloud के ग्राहक हैं, तो अपने संगठन के लिए इन प्रॉपर्टी को सेट करने के लिए, Apigee Edge की सहायता टीम से संपर्क करें. इसके अलावा, मौजूदा टोकन को एक साथ हैश करने के लिए भी संपर्क करें.
मिलते-जुलते विषय
- क्लाइंट क्रेडेंशियल ग्रांट टाइप लागू करना
- ऑथराइज़ेशन कोड के लिए अनुमति देने का तरीका लागू करना
- एपीआई सुरक्षा से जुड़ा ऑनलाइन कोर्स (इसमें OAuth शामिल है)
- OAuthV2 नीति -- इसमें कई उदाहरण दिए गए हैं. इनसे पता चलता है कि अनुमति देने वाले सर्वर से अनुरोध कैसे किए जाते हैं और OAuthV2 नीति को कैसे कॉन्फ़िगर किया जाता है.