ऐक्सेस टोकन और ऑथराइज़ेशन कोड के लिए अनुरोध करना

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 - जवाब के साथ वापस भेजी जाने वाली स्ट्रिंग. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए जाने वाले अनुरोध की जालसाज़ी से बचाने के लिए किया जाता है.
  • स्कोप - इससे, उन एपीआई प्रॉडक्ट की सूची को फ़िल्टर करने की सुविधा मिलती है जिनके साथ मिंटेड टोकन का इस्तेमाल किया जा सकता है. दायरे के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप के साथ काम करना देखें.

पुष्टि करना

आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को, पुष्टि करने वाले बुनियादी हेडर (Base64 कोड में बदला गया) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. आपको ये वैल्यू, रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिलती हैं. साथ ही, "पुष्टि करने के बुनियादी क्रेडेंशियल को कोड में बदलने का तरीका" भी देखें.

एंडपॉइंट का सैंपल

ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का सैंपल दिया गया है. यह generateAccessToken नीति लागू करेगा. इसे ऑथराइज़ेशन_कोड ग्रांट टाइप के हिसाब से कॉन्फ़िगर करना ज़रूरी है.

...
       <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'

ज़रूरी पैरामीटर

डिफ़ॉल्ट रूप से, ज़रूरी Grants_type पैरामीटर x-www-form-urlencoded होना चाहिए और इसे अनुरोध के मुख्य हिस्से में बताया गया होना चाहिए (जैसा कि ऊपर उदाहरण में दिखाया गया है). हालांकि, इस /accesstoken एंडपॉइंट से जुड़े OAuthV2 नीति में <GrantType> एलिमेंट को कॉन्फ़िगर करके, इस डिफ़ॉल्ट पैरामीटर को बदला जा सकता है. उदाहरण के लिए, आपके पास क्वेरी पैरामीटर में पैरामीटर को पास करने का विकल्प है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.

  • grant_type - वैल्यू client_credentials पर सेट होना चाहिए.

ज़रूरी नहीं पैरामीटर

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

पुष्टि करना

आपको Client-ID और क्लाइंट सीक्रेट को, पुष्टि करने वाले बुनियादी हेडर (Base64-एन्कोडेड) के तौर पर या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. आपको ये वैल्यू, अनुरोध से जुड़े रजिस्टर किए गए डेवलपर ऐप्लिकेशन से मिलती हैं. "पुष्टि करने के बुनियादी क्रेडेंशियल को कोड में बदलने का तरीका" भी देखें.

एंडपॉइंट का सैंपल

ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का सैंपल दिया गया है. यह generateAccessToken नीति लागू करेगा. इसे client_क्रेडेंशियल अनुदान टाइप के साथ काम करने के लिए कॉन्फ़िगर किया जाना चाहिए.

...
       <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 नीति देखें.

आम तौर पर, LDAP या JavaScript नीति का इस्तेमाल करके, क्रेडेंशियल स्टोर के लिए उपयोगकर्ता क्रेडेंशियल की पुष्टि की जाती है.

  • grant_type - वैल्यू password पर सेट किया जाना चाहिए.
  • उपयोगकर्ता नाम - संसाधन के मालिक का उपयोगकर्ता नाम.
  • password - संसाधन के मालिक का पासवर्ड.

ज़रूरी नहीं पैरामीटर

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

पुष्टि करना

आपको Client-ID और क्लाइंट सीक्रेट को, पुष्टि करने वाले बुनियादी हेडर (Base64-एन्कोडेड) के तौर पर या फ़ॉर्म पैरामीटर 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'

ज़रूरी पैरामीटर

डिफ़ॉल्ट रूप से, ये पैरामीटर क्वेरी पैरामीटर होने चाहिए (जैसा कि ऊपर दिए गए नमूने में दिखाया गया है). हालांकि, /token एंडपॉइंट से जुड़ी OAuthV2 नीति में <ResponseType>, <ClientId>, और <RedirectUri> एलिमेंट को कॉन्फ़िगर करके, इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.

आम तौर पर, LDAP सेवा कॉलआउट या JavaScript नीति का इस्तेमाल करके, क्रेडेंशियल स्टोर के लिए उपयोगकर्ता क्रेडेंशियल की पुष्टि की जाती है.

  • response_type - token वैल्यू पर सेट किया जाना चाहिए.
  • client_id - रजिस्टर किए गए डेवलपर ऐप्लिकेशन का क्लाइंट आईडी.
  • redirect_uri - अगर क्लाइंट डेवलपर ऐप्लिकेशन को रजिस्टर करते समय, कॉलबैक यूआरआई नहीं दिया गया था, तो यह पैरामीटर ज़रूरी है. अगर क्लाइंट रजिस्ट्रेशन के समय कोई कॉलबैक यूआरएल दिया गया था, तो उसकी इस वैल्यू से तुलना की जाएगी और वह पूरी तरह से मैच होना चाहिए.

ज़रूरी नहीं पैरामीटर

  • state - जवाब के साथ वापस भेजी जाने वाली स्ट्रिंग. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए जाने वाले अनुरोध की जालसाज़ी से बचाने के लिए किया जाता है.
  • स्कोप - इससे, उन एपीआई प्रॉडक्ट की सूची को फ़िल्टर करने की सुविधा मिलती है जिनके साथ मिंटेड टोकन का इस्तेमाल किया जा सकता है. दायरे के बारे में ज़्यादा जानकारी के लिए, 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 generateAuthizationCode नीति अटैच की गई है. नीचे दिया गया सैंपल एंडपॉइंट देखें.

ज़रूरी पैरामीटर

डिफ़ॉल्ट रूप से, ये पैरामीटर क्वेरी पैरामीटर होने चाहिए (जैसा कि ऊपर दिए गए नमूने में दिखाया गया है). हालांकि, /authorize एंडपॉइंट से जुड़ी OAuthV2 नीति में <ResponseType>, <ClientId>, और <RedirectUri> एलिमेंट को कॉन्फ़िगर करके, इस डिफ़ॉल्ट सेटिंग को बदला जा सकता है. ज़्यादा जानकारी के लिए, OAuthV2 नीति देखें.

  • response_type - code वैल्यू पर सेट किया जाना चाहिए.
  • client_id - रजिस्टर किए गए डेवलपर ऐप्लिकेशन का क्लाइंट आईडी.

ज़रूरी नहीं पैरामीटर

  • redirect_uri - अगर रजिस्टर किए गए क्लाइंट ऐप्लिकेशन में, पूरा (आंशिक नहीं) कॉलबैक यूआरआई के बारे में बताया गया है, तो यह पैरामीटर ज़रूरी नहीं है. ऐसा न करने पर, इसकी जानकारी देना ज़रूरी होता है. कॉलबैक वह यूआरएल है जहां Edge, नया मिंट किया हुआ ऑथराइज़ेशन कोड भेजता है. ऐप्लिकेशन रजिस्टर करें और एपीआई कुंजियां मैनेज करें भी देखें.
  • state - जवाब के साथ वापस भेजी जाने वाली स्ट्रिंग. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए जाने वाले अनुरोध की जालसाज़ी से बचाने के लिए किया जाता है.
  • स्कोप - इससे, उन एपीआई प्रॉडक्ट की सूची को फ़िल्टर करने की सुविधा मिलती है जिनके साथ मिंटेड टोकन का इस्तेमाल किया जा सकता है. दायरे के बारे में ज़्यादा जानकारी के लिए, 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>

नीति का नमूना

यह जनरेट की गई कोड से जुड़ी बुनियादी नीति है. इस नीति की मदद से कॉन्फ़िगर किए जा सकने वाले वैकल्पिक कॉन्फ़िगरेशन एलिमेंट के बारे में जानकारी के लिए, OAuthV2 नीति देखें.

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

लौटाए गए सामान

<GenerateResponse> के चालू होने पर, यह नीति अटैच किए गए ऑथराइज़ेशन कोड के साथ redirect_uri (कॉलबैक यूआरआई) लोकेशन पर, ?code क्वेरी पैरामीटर दिखाती है. इसे 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 - जवाब के साथ वापस भेजी जाने वाली स्ट्रिंग. आम तौर पर, इसका इस्तेमाल किसी दूसरी साइट से किए जाने वाले अनुरोध की जालसाज़ी से बचाने के लिए किया जाता है.
  • स्कोप - इससे, उन एपीआई प्रॉडक्ट की सूची को फ़िल्टर करने की सुविधा मिलती है जिनके साथ मिंटेड टोकन का इस्तेमाल किया जा सकता है. दायरे के बारे में ज़्यादा जानकारी के लिए, OAuth2 स्कोप के साथ काम करना देखें.

पुष्टि करना

  • client_id
  • client_secret

आपको क्लाइंट आईडी और क्लाइंट सीक्रेट को, पुष्टि करने वाले बुनियादी हेडर (Base64 कोड में बदला गया) या फ़ॉर्म पैरामीटर client_id और client_secret के तौर पर पास करना होगा. "पुष्टि करने के बुनियादी क्रेडेंशियल को कोड में बदलने का तरीका" भी देखें.

ऐक्सेस टोकन को रीफ़्रेश करने पर, उपयोगकर्ता की फिर से पुष्टि नहीं होती.

रीफ़्रेश टोकन का इस्तेमाल करके ऐक्सेस टोकन जनरेट करने के लिए, यहां एंडपॉइंट कॉन्फ़िगरेशन का सैंपल दिया गया है. यह रीफ़्रेशAccessToken नीति को लागू करेगा.

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

नीति का नमूना

यह एक बेसिक रीफ़्रेशAccessToken नीति है, जिसे 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

पुष्टि करने के बुनियादी क्रेडेंशियल को कोड में बदलने का तरीका

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

सूडो कोड में:

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 कोड में बदले गए हेडर को अपने-आप जनरेट करते हैं.

डेटाबेस में हैशिंग टोकन

डेटाबेस की सुरक्षा का उल्लंघन होने पर, 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 क्लाउड के ग्राहक हैं, तो अपने संगठन में इन प्रॉपर्टी को सेट करने के लिए, Apigee Edge की सहायता टीम से संपर्क करें. साथ ही, मौजूदा टोकन को बल्क में हैश करने का विकल्प भी चुना जा सकता है.

मिलते-जुलते विषय