Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
ऑथराइज़ेशन कोड, आम तौर पर इस्तेमाल किए जाने वाले OAuth 2.0 अनुदान टाइप में से एक है. ऑथराइज़ेशन कोड का फ़्लो, एक "तीन पैरों वाला OAuth" कॉन्फ़िगरेशन होता है. इस कॉन्फ़िगरेशन में, उपयोगकर्ता रिसॉर्स सर्वर से अपनी पहचान की पुष्टि करता है और ऐप्लिकेशन को अपने सुरक्षित रिसॉर्स को ऐक्सेस करने की सहमति देता है. इसके लिए, वह क्लाइंट ऐप्लिकेशन के साथ उपयोगकर्ता नाम/पासवर्ड के बारे में जानकारी नहीं देता.
इस विषय के बारे में
इस विषय में, OAuth 2.0 के लिए अनुमति देने के तरीके के फ़्लो के बारे में सामान्य जानकारी दी गई है. साथ ही, इस फ़्लो को Apigee Edge पर लागू करने के तरीके के बारे में खास जानकारी दी गई है.
वीडियो
अपने एपीआई को सुरक्षित करने के लिए, OAuth 2.0 की अनुमति देने के तरीके का इस्तेमाल करने का तरीका जानने के लिए, यह छोटा वीडियो देखें.
इस्तेमाल के उदाहरण
यह अनुदान टाइप उन ऐप्लिकेशन के लिए है जिन्हें तीसरे पक्ष के ऐसे डेवलपर ने लिखा है जिनका एपीआई सेवा देने वाली कंपनी के साथ भरोसेमंद कारोबारी संबंध नहीं है. उदाहरण के लिए, सार्वजनिक एपीआई प्रोग्राम के लिए रजिस्टर करने वाले डेवलपर पर आम तौर पर भरोसा नहीं किया जाना चाहिए. इस तरह के अनुदान का इस्तेमाल करने पर, संसाधन सर्वर पर मौजूद उपयोगकर्ता के क्रेडेंशियल, ऐप्लिकेशन के साथ कभी शेयर नहीं किए जाते.
कोड सैंपल
आपको GitHub पर api-platform-samples
रेपो में
Apigee Edge पर, ऑथराइज़ेशन कोड अनुदान टाइप को लागू करने का पूरा और काम करने वाला सैंपल मिल सकता है. api-platform-samples/sample-proxies डायरेक्ट्री में oauth-advanced
सैंपल देखें. सैंपल की ज़्यादा जानकारी के लिए,
README फ़ाइल देखें.
फ़्लो डायग्राम
नीचे दिए गए फ़्लो डायग्राम में, ऑथराइज़ेशन सर्वर के तौर पर Apigee Edge का इस्तेमाल करके, ऑथराइज़ेशन कोड के OAuth फ़्लो को दिखाया गया है.
सलाह: इस डायग्राम का बड़ा वर्शन देखने के लिए, इस पर राइट क्लिक करें और इसे नए टैब में खोलें. इसके अलावा, इसे सेव करके इमेज व्यूअर में भी खोला जा सकता है.
ऑथराइज़ेशन कोड के फ़्लो में आने वाले चरण
यहां ऑथराइज़ेशन कोड मिलने के टाइप को लागू करने के ज़रूरी चरणों के बारे में खास जानकारी दी गई है. यहां Apigee Edge, ऑथराइज़ेशन सर्वर के तौर पर काम करता है. याद रखें, इस फ़्लो की सबसे अहम बात यह है कि क्लाइंट को संसाधन सर्वर पर उपयोगकर्ता के क्रेडेंशियल कभी नहीं दिखते.
ज़रूरी शर्तें: क्लाइंट आईडी और क्लाइंट सीक्रेट कुंजियां पाने के लिए, क्लाइंट ऐप्लिकेशन को Apigee Edge के साथ रजिस्टर होना ज़रूरी है. ज़्यादा जानकारी के लिए, क्लाइंट ऐप्लिकेशन रजिस्टर करना देखें.
1. उपयोगकर्ता फ़्लो शुरू करता है
जब ऐप्लिकेशन को किसी रिसॉर्स सर्वर (उदाहरण के लिए, किसी सोशल मीडिया साइट पर मौजूद संपर्क सूची) से उपयोगकर्ता के सुरक्षित रिसॉर्स को ऐक्सेस करने की ज़रूरत होती है, तो वह Apigee Edge को एपीआई कॉल भेजता है. इससे क्लाइंट के आईडी की पुष्टि होती है. अगर यह मान्य है, तो उपयोगकर्ता के ब्राउज़र को ऐसे लॉगिन पेज पर रीडायरेक्ट कर देता है जहां उपयोगकर्ता अपने क्रेडेंशियल डालेगा. एपीआई कॉल में वह जानकारी शामिल होती है जो क्लाइंट ऐप्लिकेशन को रजिस्टर करने के दौरान मिली थी: क्लाइंट आईडी और रीडायरेक्ट यूआरआई.
2. उपयोगकर्ता क्रेडेंशियल डालता है
अब उपयोगकर्ता को एक लॉगिन पेज दिखेगा. इस पेज पर लॉगिन क्रेडेंशियल डालने के लिए कहा जाएगा. लॉगिन हो जाने पर, हम अगले चरण पर जाते हैं.
3. उपयोगकर्ता सहमति देता है
इस चरण में उपयोगकर्ता, ऐप्लिकेशन को अपने संसाधनों को ऐक्सेस करने की सहमति देता है. आम तौर पर, सहमति वाले फ़ॉर्म में स्कोप के चुने गए विकल्प शामिल होते हैं. इस फ़ॉर्म में उपयोगकर्ता यह चुन सकता है कि रिसॉर्स सर्वर पर ऐप्लिकेशन को क्या-क्या करने की अनुमति है. उदाहरण के लिए, उपयोगकर्ता, ऐप्लिकेशन को सिर्फ़ पढ़ने का ऐक्सेस या संसाधन अपडेट करने की अनुमति दे सकता है.
4. लॉगिन ऐप्लिकेशन, Apigee Edge का अनुरोध भेजता है
अगर लॉगिन और सहमति हो जाती है, तो लॉगिन ऐप्लिकेशन डेटा को Apigee Edge के /िटेशनकोड एंडपॉइंट पर पोस्ट कर देता है. इस डेटा में रीडायरेक्ट यूआरआई, क्लाइंट आईडी, दायरा, उपयोगकर्ता से जुड़ी वह खास जानकारी शामिल होती है जिसे उसे शामिल करना है. साथ ही, लॉगिन पूरा होने का संकेत भी शामिल होता है.
5. Apigee Edge, एक ऑथराइज़ेशन कोड जनरेट करता है
जब Edge को लॉगिन ऐप्लिकेशन से अपने /Authorizecode एंडपॉइंट पर जीईटी अनुरोध मिलता है, तो दो चीज़ें होती हैं. सबसे पहले, Edge यह तय करता है कि लॉगिन हो गया है (एचटीटीपी स्टेटस या किसी दूसरे तरीके की जांच करके). Next Edge जांच करके यह पक्का करता है कि लॉगिन ऐप्लिकेशन से भेजा गया रीडायरेक्ट यूआरआई, उस समय तय किए गए रीडायरेक्ट यूआरआई से मेल खाता हो जब ऐप्लिकेशन को Apigee Edge के साथ रजिस्टर किया गया था. अगर सब कुछ ठीक है, तो Edge एक ऑथराइज़ेशन कोड जनरेट करता है. उदाहरण के लिए:
http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}
6. Edge क्लाइंट को ऑथराइज़ेशन कोड वापस भेजता है
Edge, क्लाइंट को क्वेरी पैरामीटर के तौर पर अटैच किए गए ऑथराइज़ेशन कोड के साथ 302 रीडायरेक्ट भेजता है.
7. क्लाइंट, ऑथराइज़ेशन कोड को फिर से हासिल करता है और Edge से ऐक्सेस कोड का अनुरोध करता है
अब मान्य पुष्टि कोड के साथ, क्लाइंट Edge से ऐक्सेस टोकन का अनुरोध कर सकता है. ऐसा करने के लिए, यह क्लाइंट आईडी और क्लाइंट सीक्रेट कुंजियों (Edge पर ऐप्लिकेशन के रजिस्टर होने पर हासिल होती है), अनुदान टाइप, और स्कोप को पोस्ट करता है. क्लाइंट आईडी और सीक्रेट कुंजियां शामिल करके, Apigee Edge यह पुष्टि कर सकता है कि क्लाइंट ऐप्लिकेशन वही है जिसे रजिस्टर किया गया था. उदाहरण के लिए:
$ curl https://{org_name}-test.apigee.net/my_oauth_proxy/accesstoken?code=Xyz123&grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpKNhGar6K&client_secret=hAr4GngA9vAyvI4'
8. क्लाइंट को एक ऐक्सेस टोकन मिलता है
अगर सब कुछ हो जाता है, तो Edge क्लाइंट को ऐक्सेस टोकन दिखाता है. ऐक्सेस टोकन की समयसीमा खत्म होने के बाद, यह टोकन सिर्फ़ उस दायरे के लिए मान्य होगा जो उपयोगकर्ता ने तय किया है. ऐसा तब होगा, जब उपयोगकर्ता ने ऐप्लिकेशन को अपने संसाधन ऐक्सेस करने की सहमति दी हो.
9. क्लाइंट, सुरक्षित एपीआई को कॉल करता है
अब क्लाइंट, मान्य ऐक्सेस कोड की मदद से सुरक्षित एपीआई को कॉल कर सकता है. इस स्थिति में, Apigee Edge (प्रॉक्सी) को अनुरोध किए जाते हैं और टारगेट रिसॉर्स सर्वर के साथ एपीआई कॉल को पास करने से पहले, ऐक्सेस टोकन की पुष्टि करने के लिए Edge की ज़िम्मेदारी होती है. ऐक्सेस टोकन, ऑथराइज़ेशन हेडर में पास किए जाते हैं. उदाहरण के लिए:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
फ़्लो और नीतियां कॉन्फ़िगर करना
ऑथराइज़ेशन सर्वर के तौर पर, Edge को कई OAuth अनुरोध प्रोसेस करने होते हैं: ऐक्सेस टोकन, पुष्टि करने के कोड, रीफ़्रेश टोकन, लॉगिन पेज रीडायरेक्ट वगैरह के लिए. इन एंडपॉइंट को कॉन्फ़िगर करने के दो बुनियादी चरण होते हैं:
- कस्टम फ़्लो बनाना
- OAuthV2 नीतियों को जोड़ना और कॉन्फ़िगर करना
कस्टम फ़्लो कॉन्फ़िगरेशन
आम तौर पर, इस तरह के अनुदान के फ़्लो को कॉन्फ़िगर किया जाता है, ताकि फ़्लो का हर चरण या "लेग" को Apigee Edge प्रॉक्सी में एक फ़्लो से तय किया जा सके. हर फ़्लो में एक एंडपॉइंट और एक नीति होती है, जो OAuth के लिए ज़रूरी टास्क को पूरा करती है. जैसे, ऑथराइज़ेशन कोड या ऐक्सेस टोकन जनरेट करना. उदाहरण
के लिए, जैसा कि नीचे एक्सएमएल में दिखाया गया है, /oauth/authorizationcode
एंडपॉइंट में generateAuthCode नाम की नीति मौजूद है.
एक्सएमएल के उदाहरण की मदद से, फ़्लो कॉन्फ़िगरेशन को आसानी से दिखाया जा सकता है. हर फ़्लो के बारे में जानकारी के लिए, इन-लाइन टिप्पणियां देखें. यह एक उदाहरण है -- फ़्लो के नाम और पाथ को आप जैसे चाहें, कॉन्फ़िगर किया जा सकता है. इस तरह के कस्टम फ़्लो को बनाने के ज़रूरी तरीकों के बारे में खास जानकारी पाने के लिए, OAuth एंडपॉइंट और नीतियां कॉन्फ़िगर करना भी देखें.
GitHub पर लागू करने का उदाहरण भी देखें.
<Flows>
<Flow name="RedirectToLoginApp">
<!--
Publish this URI to developers to use for their 'login' link
-->
<Condition>proxy.pathsuffix == "/oauth/authorize"</Condition>
<Request>
<Step><Name>RedirectToLoginPage</Name></Step>
</Request>
</Flow>
<Flow name="GetAuthCode">
<!--
Call this URL from your Login app after you authenticate the user.
The policy will automatically return the auth code in the response to the
redirect_uri registered by the calling app
-->
<Condition>proxy.pathsuffix == "/oauth/authorizationcode"</Condition>
<Request>
<Step><Name>GenerateAuthCode</Name></Step>
</Request>
</Flow>
<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>GenerateAccessToken</Name></Step>
</Request>
</Flow>
</Flows>
नीतियों के साथ फ़्लो कॉन्फ़िगर करना
हर एंडपॉइंट के साथ एक नीति जुड़ी होती है. आइए, नीतियों के उदाहरण देखें. प्रॉक्सी एंडपॉइंट में OAuthV2 नीतियां जोड़ने के लिए ज़रूरी चरणों के बारे में खास जानकारी पाने के लिए, OAuth एंडपॉइंट और नीतियां कॉन्फ़िगर करना भी देखें.
लॉगिन रीडायरेक्ट
यह /oauth/authorize
पाथ है. अटैच की गई नीति,
उपयोगकर्ता को ऐसे लॉगिन ऐप्लिकेशन पर रीडायरेक्ट करने के लिए ज़िम्मेदार है जहां असली उपयोगकर्ता, क्लाइंट ऐप्लिकेशन को सुरक्षित
रिसॉर्स ऐक्सेस करने की अनुमति दे सकता है. इसके लिए, वह अपना उपयोगकर्ता नाम और पासवर्ड, क्लाइंट ऐप्लिकेशन के साथ शेयर नहीं कर सकता.
इसके लिए, सेवा की कॉलआउट नीति, JavaScript, Node.js या
दूसरे तरीके इस्तेमाल किए जा सकते हैं.
अनुरोध करने के लिए, एपीआई कॉल एक जीईटी है और इसके लिए क्वेरी पैरामीटर client_id, response_type, redirect_uri, स्कोप, और स्टेटस की ज़रूरत होती है.
$ curl http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}
पुष्टि करने वाला कोड पाएं
यह /oauth/authorizationcode
पाथ है. यह उस OAuthV2 नीति का इस्तेमाल करता है जिसके साथ
generateAuthizationCode कार्रवाई के बारे में बताया गया है.
<OAuthV2 async="false" continueOnError="false" enabled="true" name="GetAuthCode"> <DisplayName>GetAuthCode</DisplayName> <Operation>GenerateAuthorizationCode</Operation> <ExpiresIn>600000</ExpiresIn> <GenerateResponse/> </OAuthV2>
ऑथराइज़ेशन कोड पाने के लिए, एपीआई कॉल एक जीईटी होता है. इसके लिए, क्वेरी पैरामीटर client_id,response_type, और स्कोप और स्थिति की ज़रूरत होती है, जैसा कि इस उदाहरण में दिखाया गया है:
$curl http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&scope=scope1%20scope2&state={some_string}
ऐक्सेस टोकन पाएं
यह नीति, /oauth/accesstoken
पाथ से अटैच की गई है. यह OAuthV2 नीति का इस्तेमाल, generateAccessCode कार्रवाई के साथ करता है. इस मामले में, Grants_type पैरामीटर की
क्वेरी पैरामीटर के तौर पर उम्मीद की जाती है:
<OAuthV2 name="GetAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>360000000</ExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
ऐक्सेस कोड पाने के लिए, एपीआई कॉल एक पीओएसटी है. इसमें client_id, client_secret, Grants_type=permission_code, और वैकल्पिक तौर पर स्कोप शामिल होना चाहिए. उदाहरण के लिए:
$ curl https://{org_name}-test.apigee.net/oauth/accesstoken?grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'
यह सिर्फ़ एक बुनियादी जानकारी है. प्रोडक्शन के एक उदाहरण में, यूआरएल बनाने, ट्रांसफ़ॉर्मेशन करने, और अन्य टास्क करने से जुड़ी कई अन्य नीतियां शामिल हैं. पूरे और काम करने वाले प्रोजेक्ट के लिए, GitHub पर सैंपल देखें.
ऐक्सेस टोकन की पुष्टि करने की नीति अटैच की जा रही है
सुरक्षित एपीआई को ऐक्सेस करने वाले किसी भी फ़्लो की शुरुआत में, VerificationAccessToken नीति (पुष्टि करने के लिए बताए गए OAuthV2 नीति के साथ OAuthV2 नीति) को अटैच करें, ताकि सुरक्षित रिसॉर्स के लिए अनुरोध मिलने पर उसे लागू किया जा सके. 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 सुरक्षा से सुरक्षित किसी एपीआई को कॉल करने के लिए, आपको एक मान्य ऐक्सेस टोकन दिखाना होगा. टोकन को ऑथराइज़ेशन हेडर में शामिल करना सही पैटर्न है: ध्यान दें: ध्यान दें कि ऐक्सेस टोकन को "बियरर टोकन" भी कहा जाता है.
$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \ http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282
ऐक्सेस टोकन भेजना भी देखें.