यह दस्तावेज़ बताता है कि वेब सर्वर ऐप्लिकेशन, Google API ऐक्सेस करने के लिए, OAuth 2.0 को लागू करने के लिए, Google API क्लाइंट लाइब्रेरी या Google OAuth 2.0 एंडपॉइंट का इस्तेमाल कैसे करते हैं.
OAuth 2.0, उपयोगकर्ताओं को उनके उपयोगकर्ता नाम, पासवर्ड, और दूसरी जानकारी को निजी रखते हुए, ऐप्लिकेशन के साथ खास डेटा शेयर करने की सुविधा देता है. उदाहरण के लिए, कोई ऐप्लिकेशन OAuth 2.0 का इस्तेमाल करके उपयोगकर्ताओं से Google Drive में उनकी फ़ाइलें सेव करने की अनुमति ले सकता है.
यह OAuth 2.0 फ़्लो खास तौर पर उपयोगकर्ता की अनुमति के लिए है. इसे ऐसे ऐप्लिकेशन के लिए डिज़ाइन किया गया है जो गोपनीय जानकारी सेव कर सकते हैं और स्थिति बनाए रख सकते हैं. जब कोई उपयोगकर्ता, ऐप्लिकेशन से इंटरैक्ट करता है या उपयोगकर्ता, ऐप्लिकेशन छोड़ देता है, तब वेब सर्वर ऐप्लिकेशन सही तरीके से काम कर सकता है.
वेब सर्वर ऐप्लिकेशन, एपीआई अनुरोधों को अनुमति देने के लिए, अक्सर सेवा खातों का भी इस्तेमाल करते हैं. खास तौर पर, जब उपयोगकर्ता किसी खास डेटा को ऐक्सेस करने के बजाय, क्लाउड-आधारित एपीआई को प्रोजेक्ट-आधारित डेटा ऐक्सेस करने के लिए कहते हैं. वेब सर्वर ऐप्लिकेशन, सेवा खातों का इस्तेमाल उपयोगकर्ता की अनुमति के साथ कर सकते हैं.
क्लाइंट लाइब्रेरी
इस पेज पर मौजूद भाषा के हिसाब से, OAuth 2.0 ऑथराइज़ेशन लागू करने के लिए, Google API क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है. कोड सैंपल चलाने के लिए, पहले आपको अपनी भाषा के लिए क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.
जब आप अपने ऐप्लिकेशन में सेव किए गए OAuth 2.0 फ़्लो को मैनेज करने के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं, तो क्लाइंट लाइब्रेरी में कई ऐसी कार्रवाइयां की जाती हैं जिन्हें ऐप्लिकेशन को खुद मैनेज करना पड़ता है. उदाहरण के लिए, यह तय करता है कि ऐप्लिकेशन स्टोर किए गए ऐक्सेस टोकन का इस्तेमाल कब कर सकता है या उसे रीफ़्रेश कर सकता है. साथ ही, यह भी तय करता है कि ऐप्लिकेशन को कब सहमति की ज़रूरत होगी. क्लाइंट लाइब्रेरी सही रीडायरेक्ट यूआरएल भी जनरेट करती है. साथ ही, यह ऐक्सेस टोकन लागू करने के लिए, रीडायरेक्ट कोड को लागू करने में मदद करती है.
सर्वर साइड ऐप्लिकेशन के लिए Google API क्लाइंट लाइब्रेरी इन भाषाओं में उपलब्ध हैं:
ज़रूरी बातें
अपने प्रोजेक्ट के लिए API (एपीआई) चालू करें
Google API को कॉल करने वाले किसी भी ऐप्लिकेशन को, API Consoleमें उन एपीआई को चालू करना होगा.
अपने प्रोजेक्ट के लिए एपीआई को चालू करने के लिए:
- Open the API Library में Google API Console.
- If prompted, select a project, or create a new one.
- API Library सभी उपलब्ध एपीआई की सूची बनाता है. इन्हें प्रॉडक्ट परिवार और लोकप्रियता के हिसाब से ग्रुप किया जाता है. आप जिस एपीआई को चालू करना चाहते हैं वह अगर सूची में मौजूद नहीं है, तो खोज का इस्तेमाल करें.
- वह एपीआई चुनें जिसे आप चालू करना चाहते हैं, फिर चालू करें बटन पर क्लिक करें.
- If prompted, enable billing.
- If prompted, read and accept the API's Terms of Service.
अनुमति वाले क्रेडेंशियल बनाना
Google API ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करने वाले किसी भी ऐप्लिकेशन के पास, Google और #39;s OAuth 2.0 सर्वर को ऐप्लिकेशन की पहचान करने वाले अनुमति क्रेडेंशियल होने चाहिए. नीचे दिए गए चरणों में बताया गया है कि अपने प्रोजेक्ट के लिए क्रेडेंशियल कैसे बनाए जा सकते हैं. इसके बाद, आपके ऐप्लिकेशन उन एपीआई को ऐक्सेस करने के लिए क्रेडेंशियल का इस्तेमाल कर सकते हैं जिन्हें आपने उस प्रोजेक्ट के लिए चालू किया है.
- Go to the Credentials page.
- क्रेडेंशियल बनाएं >, OAuth क्लाइंट आईडी पर क्लिक करें.
- वेब ऐप्लिकेशन ऐप्लिकेशन टाइप चुनें.
- फ़ॉर्म भरें और बनाएं पर क्लिक करें. जो ऐप्लिकेशन भाषाओं, फ़्रेमवर्क,
जैसे कि PHP, Java, Python, Ruby, और .NET का इस्तेमाल करते हैं उन्हें अनुमति वाले रीडायरेक्ट यूआरआई बताने चाहिए. रीडायरेक्ट यूआरएल, ऐसे एंडपॉइंट होते हैं जिन पर OAuth 2.0 सर्वर जवाब भेज सकता है. इन
एंडपॉइंट को Google की पुष्टि के नियमों का पालन करना होगा.
जांच के लिए, आप ऐसे यूआरआई तय कर सकते हैं जो स्थानीय मशीन से जुड़े हों, जैसे कि
http://localhost:8080
. इस बात को ध्यान में रखते हुए, कृपया ध्यान दें कि इस दस्तावेज़ में दिए गए सभी उदाहरणों में, रीडायरेक्ट यूआरआई के तौर परhttp://localhost:8080
का इस्तेमाल किया जाता है.हमारा सुझाव है कि अपने ऐप्लिकेशन के पुष्टि करने के एंडपॉइंट को डिज़ाइन करें, ताकि आपका ऐप्लिकेशन, पेज पर मौजूद दूसरे रिसॉर्स के लिए ऑथराइज़ेशन कोड न दिखाए.
अपने क्रेडेंशियल बनाने के बाद, API Consoleसे client_secret.json फ़ाइल डाउनलोड करें. सुरक्षित तरीके से फ़ाइल को किसी ऐसी जगह सेव करें जहां आपका ऐप्लिकेशन ही ऐक्सेस कर सके.
ऐक्सेस के दायरे की पहचान करना
स्कोप के ज़रिए आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों के ऐक्सेस का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा भी मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इसलिए, अनुरोध किए गए दायरों की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच अंतर संबंध हो सकता है.
हमारा सुझाव है कि OAuth 2.0 को लागू करने से पहले, उन दायरों की पहचान कर लें जिन्हें ऐक्सेस करने के लिए आपके ऐप्लिकेशन को अनुमति की ज़रूरत होगी.
हम यह भी सुझाव देते हैं कि आपका ऐप्लिकेशन, बढ़ोतरी के तरीके वाली प्रोसेस के ज़रिए, अनुमति देने वाले दायरों का ऐक्सेस मांगे, जिसमें आपके ऐप्लिकेशन ने उपयोगकर्ता के डेटा को ऐक्सेस करने का अनुरोध किया है. इस सबसे सही तरीके से उपयोगकर्ताओं को यह समझने में आसानी होती है कि आपके ऐप्लिकेशन को उसके ऐक्सेस की ज़रूरत क्यों है.
OAuth 2.0 एपीआई के दायरे वाले दस्तावेज़ में, उन दायरों की पूरी सूची मौजूद है जिनका इस्तेमाल करके, आप Google API ऐक्सेस कर सकते हैं.
भाषा के हिसाब से ज़रूरी शर्तें
इस दस्तावेज़ में कोई भी कोड सैंपल चलाने के लिए, आपके पास एक Google खाता, इंटरनेट का ऐक्सेस, और एक वेब ब्राउज़र होना चाहिए. अगर आप एपीआई क्लाइंट लाइब्रेरी में से किसी एक का इस्तेमाल कर रहे हैं, तो नीचे दी गई भाषा की ज़रूरी शर्तें भी देखें.
PHP
इस दस्तावेज़ में PHP कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:#39;
- इंस्टॉल किए गए कमांड-लाइन इंटरफ़ेस (सीएलआई) और JSON एक्सटेंशन के साथ, PHP 5.4 या उसके बाद का वर्शन.
- कंपोज़र डिपेंडेंसी मैनेजमेंट टूल.
-
PHP के लिए Google API क्लाइंट लाइब्रेरी:
php composer.phar require google/apiclient:^2.0
Python
इस दस्तावेज़ में Python कोड नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:#39;
- Python 2.6 या इसके बाद का वर्शन
- पीआईपी पैकेज मैनेजमेंट टूल.
- Python के लिए Google API क्लाइंट लाइब्रेरी:
pip install --upgrade google-api-python-client
- उपयोगकर्ता की अनुमति के लिए
google-auth
,google-auth-oauthlib
, औरgoogle-auth-httplib2
.pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- Flask Python वेब ऐप्लिकेशन फ़्रेमवर्क.
pip install --upgrade flask
requests
एचटीटीपी लाइब्रेरी.pip install --upgrade requests
Ruby
इस दस्तावेज़ में Ruby कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:#
- Ruby 2.2.2 या इससे ज़्यादा
-
Ruby के लिए Google API क्लाइंट लाइब्रेरी:
gem install google-api-client
-
Syatra Ruby वेब ऐप्लिकेशन फ़्रेमवर्क.
gem install sinatra
Node.js के लिए
इस दस्तावेज़ में Node.js कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:#39;
- LTS, चालू LTS या Node.js के मौजूदा रिलीज़ का रखरखाव.
-
Google API Node.js क्लाइंट:
npm install googleapis
एचटीटीपी/REST
OAuth 2.0 एंडपॉइंट को सीधे कॉल करने के लिए, आपको किसी भी लाइब्रेरी को इंस्टॉल करने की ज़रूरत नहीं है.
OAuth 2.0 ऐक्सेस टोकन पाना
नीचे दिया गया तरीका बताता है कि आपका ऐप्लिकेशन उपयोगकर्ता और #39; की ओर से एपीआई अनुरोध करने के लिए, Google और #39; OAuth 2.0 सर्वर के साथ कैसे इंटरैक्ट करता है. Google एपीआई अनुरोध को लागू करने से पहले, आपके ऐप्लिकेशन को वह सहमति लेनी होगी जिसमें उपयोगकर्ता की अनुमति ज़रूरी है.
नीचे दी गई सूची में इन कदमों के बारे में खास जानकारी दी गई है:
- आपका ऐप्लिकेशन उन अनुमतियों की पहचान करता है जिनकी उसे ज़रूरत है.
- आपका ऐप्लिकेशन, अनुरोध की गई अनुमतियों के साथ-साथ उपयोगकर्ता को Google पर रीडायरेक्ट करता है.
- उपयोगकर्ता यह तय करता है कि आपके ऐप्लिकेशन को अनुमतियां देनी हैं या नहीं.
- आपके ऐप्लिकेशन को पता चलता है कि उपयोगकर्ता ने क्या तय किया है.
- अगर उपयोगकर्ता ने अनुरोध करने की अनुमतियां दे दी हैं, तो आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से एपीआई अनुरोध करने के लिए, ज़रूरी टोकन हासिल कर लेता है.
पहला चरण: अनुमति देने के पैरामीटर सेट करना
सबसे पहले आपको अनुमति का अनुरोध बनाना होगा. यह अनुरोध, आपके ऐप्लिकेशन की पहचान करने वाले पैरामीटर सेट करता है. साथ ही, उन अनुमतियों को तय करता है जिन्हें उपयोगकर्ता से आपके ऐप्लिकेशन को देने के लिए कहा जाएगा.
- अगर आप OAuth 2.0 पुष्टि करने और अनुमति देने के लिए Google क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं, तो आप एक ऐसा ऑब्जेक्ट बनाते और कॉन्फ़िगर करते हैं जो इन पैरामीटर के बारे में बताता है.
- अगर आप सीधे Google OAuth 2.0 एंडपॉइंट को कॉल करते हैं, तो आप एक यूआरएल जनरेट करेंगे और उस यूआरएल पर पैरामीटर सेट करेंगे.
नीचे दिए गए टैब, वेब सर्वर ऐप्लिकेशन के लिए इस्तेमाल किए जा सकने वाले अनुमति पैरामीटर के बारे में बताते हैं. भाषा के हिसाब से बने उदाहरणों में यह भी दिखाया गया है कि उन पैरामीटर को सेट करने वाले ऑब्जेक्ट को कॉन्फ़िगर करने के लिए, क्लाइंट लाइब्रेरी या ऑथराइज़ेशन लाइब्रेरी का इस्तेमाल कैसे किया जाता है.
PHP
नीचे दिया गया कोड स्निपेट, Google_Client()
ऑब्जेक्ट बनाता है जो ऑथराइज़ेशन अनुरोध में
पैरामीटर के बारे में बताता है.
वह ऑब्जेक्ट आपके ऐप्लिकेशन की पहचान करने के लिए आपकी client_secret.json फ़ाइल की जानकारी का इस्तेमाल करता है. (उस फ़ाइल के बारे में ज़्यादा जानकारी के लिए,
अनुमति देने वाले क्रेडेंशियल बनाना देखें.) ऑब्जेक्ट, उन दायरों की भी पहचान करता है जिन्हें आपका ऐप्लिकेशन ऐक्सेस करने की अनुमति मांग रहा है. साथ ही, यह आपके ऐप्लिकेशन और यूआरएल के यूआरएल का यूआरएल भी लेता है जो कि Google और #39; OAuth 2.0 सर्वर से मिलने वाले रिस्पॉन्स को हैंडल करेगा. आखिर में, कोड वैकल्पिक access_type
और
include_granted_scopes
पैरामीटर सेट करता है.
उदाहरण के लिए, यह कोड उपयोगकर्ता की 'Google डिस्क' को सिर्फ़ पढ़ने का ऑफ़लाइन ऐक्सेस मांगता है:
$client = new Google_Client(); $client->setAuthConfig('client_secret.json'); $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); // offline access will give you both an access and refresh token so that // your app can refresh the access token without user interaction. $client->setAccessType('offline'); // Using "consent" ensures that your application always receives a refresh token. // If you are not using offline access, you can omit this. $client->setApprovalPrompt("consent"); $client->setIncludeGrantedScopes(true); // incremental auth
अनुरोध में यह जानकारी दी गई है:
पैरामीटर | |||||||
---|---|---|---|---|---|---|---|
client_id |
ज़रूरी
आपके ऐप्लिकेशन के लिए क्लाइंट आईडी. आपको यह वैल्यू API Console Credentials pageमें दिखेगी. PHP में, client_secret.json फ़ाइल से
अनुमति वाले क्रेडेंशियल लोड करने के लिए, $client = new Google_Client(); $client->setAuthConfig('client_secret.json'); |
||||||
redirect_uri |
ज़रूरी
यह तय करता है कि उपयोगकर्ता के ऑथराइज़ेशन फ़्लो को पूरा करने के बाद, एपीआई सर्वर उपयोगकर्ता को कहां रीडायरेक्ट करता है. यह वैल्यू, OAuth 2.0 क्लाइंट के लिए
अनुमति वाले किसी एक रीडायरेक्ट यूआरआई से पूरी तरह मेल खानी चाहिए जिसे आपने अपने क्लाइंट
API Console
Credentials pageमें कॉन्फ़िगर किया था. अगर यह मान'दिए गए ध्यान दें कि इस वैल्यू को PHP में सेट करने के लिए, $client->setRedirectUri('https://oauth2.example.com/code'); |
||||||
scope |
ज़रूरी
स्पेस की दायरे वाली सूची, जिसमें ऐसे संसाधन शामिल हैं जिन्हें आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. ये मान Google को उस सहमति स्क्रीन के बारे में बताते हैं जिसे Google दिखाता है. स्कोप के ज़रिए आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों के ऐक्सेस का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा भी मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इस तरह, अनुरोध किए गए दायरों की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच संबंध अलग-अलग होता है. इस वैल्यू को PHP में सेट करने के लिए, $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); हमारा सुझाव है कि जब भी हो सके, अपने ऐप्लिकेशन को अनुमति देने के दायरे में ऐक्सेस देने का अनुरोध करें. संदर्भ के तौर पर इंक्रीमेंटल ऑथराइज़ेशन के ज़रिए, उपयोगकर्ता का डेटा ऐक्सेस करने का अनुरोध करके, आप उपयोगकर्ताओं को यह समझने में आसानी होती हैं कि आपके ऐप्लिकेशन को उसके ऐक्सेस का अनुरोध क्यों करना है. |
||||||
access_type |
सुझाया गया
यह बताता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर का मान्य मान अगर उपयोगकर्ता को ब्राउज़र में ऐप्लिकेशन मौजूद नहीं है, तो आपके ऐप्लिकेशन को ऐक्सेस टोकन रीफ़्रेश करने के लिए,
इस वैल्यू को PHP में सेट करने के लिए, $client->setAccessType('offline'); |
||||||
state |
सुझाया गया
ऐसे किसी भी स्ट्रिंग मान के बारे में बताता है जिसका इस्तेमाल आपका ऐप्लिकेशन, आपके अनुमति देने के अनुरोध और
अनुमति देने वाले सर्वर के रिस्पॉन्स के बीच स्थिति बनाए रखने के लिए करता है.
उपयोगकर्ता के आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार करने पर, सर्वर इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को आपके ऐप्लिकेशन में सही संसाधन पर ले जाना, गैर-लाभकारी संस्था को भेजना, और क्रॉस-साइट अनुरोध से जुड़ी धोखाधड़ी को कम करना. इस वैल्यू को PHP में सेट करने के लिए, $client->setState($sample_passthrough_value); |
||||||
include_granted_scopes |
ज़रूरी नहीं
ऐप्लिकेशन, प्रसंगों में अतिरिक्त
दायरे के ऐक्सेस का अनुरोध करने के लिए इंक्रीमेंटल
अनुमति का उपयोग करने की सुविधा चालू करता है. अगर आप इस पैरामीटर की वैल्यू को इस वैल्यू को PHP में सेट करने के लिए, $client->setIncludeGrantedScopes(true); |
||||||
login_hint |
ज़रूरी नहीं
अगर आपका ऐप्लिकेशन यह जानता है कि कौनसा उपयोगकर्ता पुष्टि करने की कोशिश कर रहा है, तो यह Google पुष्टि करने वाले सर्वर को संकेत देने के लिए इस पैरामीटर का इस्तेमाल कर सकता है. सर्वर, साइन इन फ़ॉर्म में ईमेल फ़ील्ड को भरकर या सही मल्टी-लॉगिन सेशन चुनकर, लॉगिन फ़्लो को आसान बनाने के लिए संकेत का इस्तेमाल करता है. पैरामीटर वैल्यू को ईमेल पते या इस वैल्यू को PHP में सेट करने के लिए, $client->setLoginHint('None'); |
||||||
prompt |
ज़रूरी नहीं
स्पेस को अलग-अलग करने के बाद, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) सूची का इस्तेमाल करके उपयोगकर्ता को प्रज़ेंट करना. अगर आप यह पैरामीटर तय नहीं करते हैं, तो उपयोगकर्ता को पहली बार प्रोजेक्ट के ऐक्सेस का अनुरोध करने पर ही सूचना दी जाएगी. ज़्यादा जानकारी के लिए, दोबारा सहमति देना देखें. इस वैल्यू को PHP में सेट करने के लिए, $client->setApprovalPrompt('consent'); ये वैल्यू हो सकती हैं:
|
Python
नीचे दिया गया कोड स्निपेट, ऑथराइज़ेशन अनुरोध बनाने के लिए, google-auth-oauthlib.flow
मॉड्यूल का इस्तेमाल करता है.
यह कोड एक Flow
ऑब्जेक्ट बनाता है. यह client_secret.json फ़ाइल से मिली जानकारी का इस्तेमाल करके, आपके ऐप्लिकेशन की पहचान करता है जिसे आपने ऑथराइज़ेशन क्रेडेंशियल बनाने के बाद डाउनलोड किया था. यह ऑब्जेक्ट उन दायरों की भी पहचान करता है जिन्हें आपका ऐप्लिकेशन ऐक्सेस करने की अनुमति मांग रहा है. साथ ही, यह यूआरएल आपके ऐप्लिकेशन के यूआरएल के यूआरएल के लिए भी अनुरोध करता है. यह यूआरएल, Google और #39; OAuth 2.0 सर्वर से मिलने वाले रिस्पॉन्स को हैंडल करेगा. आखिर में, कोड वैकल्पिक
access_type
और include_granted_scopes
पैरामीटर सेट करता है.
उदाहरण के लिए, यह कोड उपयोगकर्ता की 'Google डिस्क' को सिर्फ़ पढ़ने का ऑफ़लाइन ऐक्सेस मांगता है:
import google.oauth2.credentials import google_auth_oauthlib.flow # Use the client_secret.json file to identify the application requesting # authorization. The client ID (from that file) and access scopes are required. flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly']) # Indicate where the API server will redirect the user after the user completes # the authorization flow. The redirect URI is required. The value must exactly # match one of the authorized redirect URIs for the OAuth 2.0 client, which you # configured in the API Console. If this value doesn't match an authorized URI, # you will get a 'redirect_uri_mismatch' error. flow.redirect_uri = 'https://www.example.com/oauth2callback' # Generate URL for request to Google's OAuth 2.0 server. # Use kwargs to set optional request parameters. authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
अनुरोध में यह जानकारी दी गई है:
पैरामीटर | |||||||
---|---|---|---|---|---|---|---|
client_id |
ज़रूरी
आपके ऐप्लिकेशन के लिए क्लाइंट आईडी. आपको यह वैल्यू API Console Credentials pageमें दिखेगी. Python में, client_secret.json फ़ाइल से क्लाइंट आईडी
वापस पाने के लिए, flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly']) |
||||||
redirect_uri |
ज़रूरी
यह तय करता है कि उपयोगकर्ता के ऑथराइज़ेशन फ़्लो को पूरा करने के बाद, एपीआई सर्वर उपयोगकर्ता को कहां रीडायरेक्ट करता है. यह वैल्यू, OAuth 2.0 क्लाइंट के लिए
अनुमति वाले किसी एक रीडायरेक्ट यूआरआई से पूरी तरह मेल खानी चाहिए जिसे आपने अपने क्लाइंट
API Console
Credentials pageमें कॉन्फ़िगर किया था. अगर यह मान'दिए गए ध्यान दें कि इस वैल्यू को Python में सेट करने के लिए, flow.redirect_uri = 'https://oauth2.example.com/code' |
||||||
scope |
ज़रूरी
उन स्कोप की सूची जो उन संसाधनों की पहचान करती है जिन्हें आपका ऐप्लिकेशन उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. ये मान Google को उस सहमति स्क्रीन के बारे में बताते हैं जिसे Google दिखाता है. स्कोप के ज़रिए आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों के ऐक्सेस का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा भी मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इस तरह, अनुरोध किए गए दायरों की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच संबंध अलग-अलग होता है. Python में, उसी तरीके का इस्तेमाल करें जिससे आप flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly']) हमारा सुझाव है कि जब भी हो सके, अपने ऐप्लिकेशन को अनुमति देने के दायरे में ऐक्सेस देने का अनुरोध करें. संदर्भ के तौर पर इंक्रीमेंटल ऑथराइज़ेशन के ज़रिए, उपयोगकर्ता का डेटा ऐक्सेस करने का अनुरोध करके, आप उपयोगकर्ताओं को यह समझने में आसानी होती हैं कि आपके ऐप्लिकेशन को उसके ऐक्सेस का अनुरोध क्यों करना है. |
||||||
access_type |
सुझाया गया
यह बताता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर का मान्य मान अगर उपयोगकर्ता को ब्राउज़र में ऐप्लिकेशन मौजूद नहीं है, तो आपके ऐप्लिकेशन को ऐक्सेस टोकन रीफ़्रेश करने के लिए,
Python में, authorization_url, state = flow.authorization_url( access_type='offline', include_granted_scopes='true') |
||||||
state |
सुझाया गया
ऐसे किसी भी स्ट्रिंग मान के बारे में बताता है जिसका इस्तेमाल आपका ऐप्लिकेशन, आपके अनुमति देने के अनुरोध और
अनुमति देने वाले सर्वर के रिस्पॉन्स के बीच स्थिति बनाए रखने के लिए करता है.
उपयोगकर्ता के आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार करने पर, सर्वर इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को आपके ऐप्लिकेशन में सही संसाधन पर ले जाना, गैर-लाभकारी संस्था को भेजना, और क्रॉस-साइट अनुरोध से जुड़ी धोखाधड़ी को कम करना. Python में, authorization_url, state = flow.authorization_url( access_type='offline', state=sample_passthrough_value, include_granted_scopes='true') |
||||||
include_granted_scopes |
ज़रूरी नहीं
ऐप्लिकेशन, प्रसंगों में अतिरिक्त
दायरे के ऐक्सेस का अनुरोध करने के लिए इंक्रीमेंटल
अनुमति का उपयोग करने की सुविधा चालू करता है. अगर आप इस पैरामीटर की वैल्यू को Python में, authorization_url, state = flow.authorization_url( access_type='offline', include_granted_scopes='true') |
||||||
login_hint |
ज़रूरी नहीं
अगर आपका ऐप्लिकेशन यह जानता है कि कौनसा उपयोगकर्ता पुष्टि करने की कोशिश कर रहा है, तो यह Google पुष्टि करने वाले सर्वर को संकेत देने के लिए इस पैरामीटर का इस्तेमाल कर सकता है. सर्वर, साइन इन फ़ॉर्म में ईमेल फ़ील्ड को भरकर या सही मल्टी-लॉगिन सेशन चुनकर, लॉगिन फ़्लो को आसान बनाने के लिए संकेत का इस्तेमाल करता है. पैरामीटर वैल्यू को ईमेल पते या Python में, authorization_url, state = flow.authorization_url( access_type='offline', login_hint='None', include_granted_scopes='true') |
||||||
prompt |
ज़रूरी नहीं
स्पेस को अलग-अलग करने के बाद, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) सूची का इस्तेमाल करके उपयोगकर्ता को प्रज़ेंट करना. अगर आप यह पैरामीटर तय नहीं करते हैं, तो उपयोगकर्ता को पहली बार प्रोजेक्ट के ऐक्सेस का अनुरोध करने पर ही सूचना दी जाएगी. ज़्यादा जानकारी के लिए, दोबारा सहमति देना देखें. Python में, authorization_url, state = flow.authorization_url( access_type='offline', prompt='consent', include_granted_scopes='true') ये वैल्यू हो सकती हैं:
|
Ruby
अपने ऐप्लिकेशन में क्लाइंट ऑब्जेक्ट को कॉन्फ़िगर करने के लिए बनाई गई client_secrets.json फ़ाइल का इस्तेमाल करें. क्लाइंट ऑब्जेक्ट को कॉन्फ़िगर करने पर, आपके ऐप्लिकेशन के लिए जिन दायरों को ऐक्सेस किया जाना ज़रूरी है उनके साथ ऐप्लिकेशन और #39; की पुष्टि का एंडपॉइंट भी शामिल होता है. यह OAuth 2.0 सर्वर से मिलने वाले रिस्पॉन्स को हैंडल करेगा.
उदाहरण के लिए, यह कोड उपयोगकर्ता की 'Google डिस्क' को सिर्फ़ पढ़ने का ऑफ़लाइन ऐक्सेस मांगता है:
require 'google/apis/drive_v2' require 'google/api_client/client_secrets' client_secrets = Google::APIClient::ClientSecrets.load auth_client = client_secrets.to_authorization auth_client.update!( :scope => 'https://www.googleapis.com/auth/drive.metadata.readonly', :redirect_uri => 'http://www.example.com/oauth2callback', :additional_parameters => { "access_type" => "offline", # offline access "include_granted_scopes" => "true" # incremental auth } )
आपका ऐप्लिकेशन, OAuth 2.0 कार्रवाइयां करने के लिए क्लाइंट ऑब्जेक्ट का इस्तेमाल करता है. उदाहरण के लिए, अनुमति देने के अनुरोध जनरेट करना और एचटीटीपी अनुरोधों में ऐक्सेस टोकन लागू करना.
Node.js के लिए
नीचे दिया गया कोड स्निपेट, google.auth.OAuth2
ऑब्जेक्ट बनाता है जो ऑथराइज़ेशन अनुरोध में
पैरामीटर के बारे में बताता है.
वह ऑब्जेक्ट आपके ऐप्लिकेशन को पहचानने के लिए, आपके client_secret.json फ़ाइल की जानकारी का इस्तेमाल करता है. किसी उपयोगकर्ता से ऐक्सेस टोकन वापस पाने की अनुमतियां मांगने के लिए, आपको उन्हें सहमति पेज पर रीडायरेक्ट किया जाता है. सहमति वाले पेज का यूआरएल बनाने के लिए:
const {google} = require('googleapis'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI * from the client_secret.json file. To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
ध्यान दें:
refresh_token
को सिर्फ़ पहली अनुमति दी जाती है. ज़्यादा जानकारी के लिए
यहां जाएं.
एचटीटीपी/REST
Google' का OAuth 2.0 एंडपॉइंट https://accounts.google.com/o/oauth2/v2/auth
पर है. इस
एंडपॉइंट को सिर्फ़ एचटीटीपीएस पर ही ऐक्सेस किया जा सकता है. सादे HTTP कनेक्शन अस्वीकार किए जाते हैं.
Google की अनुमति देने वाला सर्वर, वेब सर्वर ऐप्लिकेशन के लिए इन क्वेरी स्ट्रिंग पैरामीटर के साथ काम करता है:
पैरामीटर | |||||||
---|---|---|---|---|---|---|---|
client_id |
ज़रूरी
आपके ऐप्लिकेशन के लिए क्लाइंट आईडी. आपको यह वैल्यू API Console Credentials pageमें दिखेगी. |
||||||
redirect_uri |
ज़रूरी
यह तय करता है कि उपयोगकर्ता के ऑथराइज़ेशन फ़्लो को पूरा करने के बाद, एपीआई सर्वर उपयोगकर्ता को कहां रीडायरेक्ट करता है. यह वैल्यू, OAuth 2.0 क्लाइंट के लिए
अनुमति वाले किसी एक रीडायरेक्ट यूआरआई से पूरी तरह मेल खानी चाहिए जिसे आपने अपने क्लाइंट
API Console
Credentials pageमें कॉन्फ़िगर किया था. अगर यह मान'दिए गए ध्यान दें कि |
||||||
response_type |
ज़रूरी
यह तय करता है कि Google OAuth 2.0 एंडपॉइंट, ऑथराइज़ेशन कोड दिखाता है या नहीं. वेब सर्वर ऐप्लिकेशन के लिए पैरामीटर वैल्यू को |
||||||
scope |
ज़रूरी
स्पेस की दायरे वाली सूची, जिसमें ऐसे संसाधन शामिल हैं जिन्हें आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. ये मान Google को उस सहमति स्क्रीन के बारे में बताते हैं जिसे Google दिखाता है. स्कोप के ज़रिए आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों के ऐक्सेस का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा भी मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इस तरह, अनुरोध किए गए दायरों की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच संबंध अलग-अलग होता है. हमारा सुझाव है कि जब भी हो सके, अपने ऐप्लिकेशन को अनुमति देने के दायरे में ऐक्सेस देने का अनुरोध करें. संदर्भ के तौर पर इंक्रीमेंटल ऑथराइज़ेशन के ज़रिए, उपयोगकर्ता का डेटा ऐक्सेस करने का अनुरोध करके, आप उपयोगकर्ताओं को यह समझने में आसानी होती हैं कि आपके ऐप्लिकेशन को उसके ऐक्सेस का अनुरोध क्यों करना है. |
||||||
access_type |
सुझाया गया
यह बताता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर का मान्य मान अगर उपयोगकर्ता को ब्राउज़र में ऐप्लिकेशन मौजूद नहीं है, तो आपके ऐप्लिकेशन को ऐक्सेस टोकन रीफ़्रेश करने के लिए,
|
||||||
state |
सुझाया गया
ऐसे किसी भी स्ट्रिंग मान के बारे में बताता है जिसका इस्तेमाल आपका ऐप्लिकेशन, आपके अनुमति देने के अनुरोध और
अनुमति देने वाले सर्वर के रिस्पॉन्स के बीच स्थिति बनाए रखने के लिए करता है.
उपयोगकर्ता के आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार करने पर, सर्वर इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को आपके ऐप्लिकेशन में सही संसाधन पर ले जाना, गैर-लाभकारी संस्था को भेजना, और क्रॉस-साइट अनुरोध से जुड़ी धोखाधड़ी को कम करना. |
||||||
include_granted_scopes |
ज़रूरी नहीं
ऐप्लिकेशन, प्रसंगों में अतिरिक्त
दायरे के ऐक्सेस का अनुरोध करने के लिए इंक्रीमेंटल
अनुमति का उपयोग करने की सुविधा चालू करता है. अगर आप इस पैरामीटर की वैल्यू को |
||||||
login_hint |
ज़रूरी नहीं
अगर आपका ऐप्लिकेशन यह जानता है कि कौनसा उपयोगकर्ता पुष्टि करने की कोशिश कर रहा है, तो यह Google पुष्टि करने वाले सर्वर को संकेत देने के लिए इस पैरामीटर का इस्तेमाल कर सकता है. सर्वर, साइन इन फ़ॉर्म में ईमेल फ़ील्ड को भरकर या सही मल्टी-लॉगिन सेशन चुनकर, लॉगिन फ़्लो को आसान बनाने के लिए संकेत का इस्तेमाल करता है. पैरामीटर वैल्यू को ईमेल पते या |
||||||
prompt |
ज़रूरी नहीं
स्पेस को अलग-अलग करने के बाद, केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) सूची का इस्तेमाल करके उपयोगकर्ता को प्रज़ेंट करना. अगर आप यह पैरामीटर तय नहीं करते हैं, तो उपयोगकर्ता को पहली बार प्रोजेक्ट के ऐक्सेस का अनुरोध करने पर ही सूचना दी जाएगी. ज़्यादा जानकारी के लिए, दोबारा सहमति देना देखें. ये वैल्यू हो सकती हैं:
|
दूसरा चरण: Google's OAuth 2.0 के सर्वर पर रीडायरेक्ट करना
पुष्टि करने और अनुमति देने की प्रोसेस शुरू करने के लिए, उपयोगकर्ता को Google के #39; OAuth 2.0 सर्वर पर रीडायरेक्ट करें. आम तौर पर, ऐसा तब होता है, जब आपके ऐप्लिकेशन को सबसे पहले उपयोगकर्ता का डेटा ऐक्सेस करना होता है. इंक्रीमेंटल ऑथराइज़ेशन के मामले में, यह चरण तब भी लागू होता है, जब आपके ऐप्लिकेशन को सबसे पहले ऐसे अन्य रिसॉर्स को ऐक्सेस करना होता है जिन्हें अब भी ऐक्सेस करने की अनुमति नहीं है.
PHP
- Google's OAuth 2.0 के सर्वर से ऐक्सेस का अनुरोध करने के लिए, यूआरएल जनरेट करें:
$auth_url = $client->createAuthUrl();
- उपयोगकर्ता को
$auth_url
पर रीडायरेक्ट करें:header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
Python
इस उदाहरण में बताया गया है कि फ़्लास्क वेब ऐप्लिकेशन फ़्रेमवर्क का इस्तेमाल करके, उपयोगकर्ता को अनुमति वाले यूआरएल पर कैसे रीडायरेक्ट किया जाता है:
return flask.redirect(authorization_url)
Ruby
- Google's OAuth 2.0 के सर्वर से ऐक्सेस का अनुरोध करने के लिए, यूआरएल जनरेट करें:
auth_uri = auth_client.authorization_uri.to_s
- उपयोगकर्ता को
auth_uri
पर रीडायरेक्ट करें.
Node.js के लिए
-
Google और #39; के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए, पहले चरण
generateAuthUrl
के तरीके से जनरेट किए गए यूआरएलauthorizationUrl
का इस्तेमाल करें. -
उपयोगकर्ता को
authorizationUrl
पर रीडायरेक्ट करें.res.writeHead(301, { "Location": authorizationUrl });
HTTP/REST
Sample redirect to Google's authorization server
An example URL is shown below, with line breaks and spaces for readability.
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
अनुरोध यूआरएल बनाने के बाद, उपयोगकर्ता को इस पर रीडायरेक्ट करें.
Google's OAuth 2.0 सर्वर उपयोगकर्ता की पुष्टि करता है. साथ ही, उपयोगकर्ता से आपके ऐप्लिकेशन के लिए अनुरोध किए गए दायरे को ऐक्सेस करने की सहमति लेता है. आपके बताए गए रीडायरेक्ट यूआरएल का इस्तेमाल करके, जवाब को आपके ऐप्लिकेशन पर वापस भेज दिया जाता है.
तीसरा चरण: Google को, सहमति देने के लिए उपयोगकर्ता से अनुरोध करना
इस चरण में, उपयोगकर्ता यह तय करता है कि आपके ऐप्लिकेशन को अनुरोध किया गया ऐक्सेस देना है या नहीं. इस स्टेज पर, Google एक सहमति विंडो दिखाता है जिसमें आपके ऐप्लिकेशन का नाम और Google API की सेवाएं शामिल होती हैं. इनकी मदद से, उपयोगकर्ता और #39; के अनुमति क्रेडेंशियल के साथ ऐक्सेस की अनुमति का अनुरोध किया जाता है. साथ ही, दिए जाने वाले ऐक्सेस के दायरे की खास जानकारी भी दिखाई जाती है. इसके बाद, उपयोगकर्ता आपके ऐप्लिकेशन के अनुरोध किए गए एक या एक से ज़्यादा दायरों का ऐक्सेस देने के लिए सहमत हो सकता है या अनुरोध को अस्वीकार कर सकता है.
आपके ऐप्लिकेशन को इस स्टेज पर कुछ भी करने की ज़रूरत नहीं है. यह Google # OAuth 2.0 के सर्वर के जवाब का इंतज़ार करता है, जो यह बताता है कि कोई ऐक्सेस दिया गया है या नहीं. इस रिस्पॉन्स को अगले चरण में बताया गया है.
गड़बड़ियां
Google सामान्य गड़बड़ी कोड और सुझाए गए रिज़ॉल्यूशन नीचे दिए गए हैं.
admin_policy_enforced
Google खाता, अपने Google Workspace एडमिन की नीतियों की वजह से, अनुरोध किए गए एक या उससे ज़्यादा दायरों को अनुमति नहीं दे सकता. अपने Google Workspace एडमिन के सहायता लेख पर जाएं यह कंट्रोल करें कि तीसरे पक्ष के कौनसे ऐप्लिकेशन और अंदरूनी ऐप्लिकेशन, Google Workspace के डेटा को ऐक्सेस कर सकते हैं. इस बारे में ज़्यादा जानकारी पाएं कि आपका एडमिन, आपके OAuth क्लाइंट आईडी के लिए सभी दायरों या संवेदनशील और प्रतिबंधित दायरों के ऐक्सेस को कैसे प्रतिबंधित कर सकता है.
disallowed_useragent
ऑथराइज़ेशन एंडपॉइंट को एम्बेड किए गए उपयोगकर्ता-एजेंट में दिखाया जाता है, जिसे Google की OAuth 2.0 नीतियों ने अनुमति नहीं दी है.
Android
android.webkit.WebView
में अनुमति के अनुरोध खोलने पर, Android डेवलपर को यह गड़बड़ी का मैसेज मिल सकता है.
इसके बजाय, डेवलपर को Android लाइब्रेरी का इस्तेमाल करना चाहिए, जैसे कि Android के लिए Google साइन इन या OpenGL फ़ाउंडेशन का #39; Android के लिए AppAuth.
वेब डेवलपर को यह गड़बड़ी तब मिल सकती है, जब Android ऐप्लिकेशन एम्बेड किए गए उपयोगकर्ता एजेंट में सामान्य वेब लिंक खोलता है. साथ ही, जब उपयोगकर्ता आपकी साइट पर जाकर, Google' OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर जाता है, तो यह गड़बड़ी हो सकती है. डेवलपर को ऑपरेटिंग सिस्टम के डिफ़ॉल्ट लिंक हैंडलर में सामान्य लिंक खोलने की अनुमति देनी चाहिए. इसमें Android ऐप्लिकेशन लिंक हैंडलर या डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन, दोनों शामिल होते हैं. Android कस्टम टैब लाइब्रेरी भी काम करती है.
iOS
WKWebView
में अनुमति देने का अनुरोध खोलने पर iOS और macOS डेवलपर इस गड़बड़ी का सामना कर सकते हैं.
इसके बजाय, डेवलपर को iOS लाइब्रेरी का इस्तेमाल करना चाहिए, जैसे कि
iOS के लिए Google साइन इन या OpenGL Foundation's
iOS के लिए AppAuth.
वेब डेवलपर को यह गड़बड़ी तब मिल सकती है, जब iOS या macOS ऐप्लिकेशन एम्बेड किए गए उपयोगकर्ता एजेंट में सामान्य वेब लिंक खोलता हो. साथ ही, जब उपयोगकर्ता आपकी साइट पर जाकर, Google's OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर जाता है, तो यह गड़बड़ी आ सकती है. डेवलपर को ऑपरेटिंग सिस्टम के डिफ़ॉल्ट लिंक हैंडलर में सामान्य लिंक खोलने की अनुमति देनी चाहिए.
इसमें यूनिवर्सल लिंक हैंडलर या डिफ़ॉल्ट ब्राउज़र ऐप्लिकेशन, दोनों शामिल होते हैं.
SFSafariViewController
लाइब्रेरी भी एक विकल्प है.
org_internal
अनुरोध में दिया गया OAuth क्लाइंट आईडी, किसी खास Google Cloud संगठन में Google खातों का ऐक्सेस सीमित करने वाले प्रोजेक्ट का हिस्सा है. इस कॉन्फ़िगरेशन विकल्प के बारे में ज़्यादा जानकारी के लिए, OAuth सहमति स्क्रीन को सेट अप करने से जुड़े लेख में उपयोगकर्ता टाइप सेक्शन देखें.
redirect_uri_mismatch
अनुमति के अनुरोध में पास किया गया redirect_uri
, OAuth क्लाइंट आईडी के लिए आधिकारिक
रीडायरेक्ट यूआरआई से मेल नहीं खाता. Google API Console Credentials page
में आधिकारिक रीडायरेक्ट यूआरआई की समीक्षा करें.
चौथा चरण: OAuth 2.0 सर्वर का रिस्पॉन्स मैनेज करना
OAuth 2.0 सर्वर आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध का जवाब, अनुरोध में दिए गए यूआरएल का इस्तेमाल करके देता है.
अगर उपयोगकर्ता ऐक्सेस के अनुरोध को स्वीकार कर लेता है, तो जवाब में एक ऑथराइज़ेशन कोड शामिल होता है. अगर उपयोगकर्ता, अनुरोध स्वीकार नहीं करता है, तो जवाब में गड़बड़ी का मैसेज होता है. वेब सर्वर पर लौटाया गया अनुमति कोड या गड़बड़ी का मैसेज, क्वेरी स्ट्रिंग पर दिखता है, जैसा कि नीचे दिखाया गया है:
गड़बड़ी का जवाब:
https://oauth2.example.com/auth?error=access_denied
ऑथराइज़ेशन कोड रिस्पॉन्स:
https://oauth2.example.com/auth?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7
OAuth 2.0 सर्वर में दिखने वाला सैंपल रिस्पॉन्स
आप नीचे दिए गए सैंपल यूआरएल पर क्लिक करके इस फ़्लो की जांच कर सकते हैं. यह यूआरएल 'Google डिस्क' में मौजूद फ़ाइलों का मेटाडेटा देखने का रीड-ओनली ऐक्सेस मांगता है:
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
OAuth 2.0 फ़्लो को पूरा करने के बाद, आपको
http://localhost/oauth2callback
पर रीडायरेक्ट किया जाना चाहिए. इससे तब तक
404 NOT FOUND
गड़बड़ी जनरेट होगी, जब तक आपकी स्थानीय मशीन उस पते पर फ़ाइल नहीं दिखाती. जब उपयोगकर्ता को आपके ऐप्लिकेशन पर रीडायरेक्ट किया जाता है, तो अगले चरण में यूआरआई के बारे में ज़्यादा जानकारी दी जाती है.
पांचवां चरण: रीफ़्रेश करने और टोकन ऐक्सेस करने के लिए, ऑथराइज़ेशन कोड को एक्सचेंज करना
वेब सर्वर को ऑथराइज़ेशन कोड मिलने के बाद, वह ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को एक्सचेंज कर सकता है.
PHP
ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदलने के लिए, authenticate
तरीके का इस्तेमाल करें:
$client->authenticate($_GET['code']);
आप getAccessToken
तरीके की मदद से, ऐक्सेस टोकन वापस पा सकते हैं:
$access_token = $client->getAccessToken();
Python
अपने कॉलबैक पेज पर, ऑथराइज़ेशन सर्वर रिस्पॉन्स की पुष्टि करने के लिए, google-auth
लाइब्रेरी का इस्तेमाल करें. इसके बाद, ऐक्सेस टोकन के लिए उस रिस्पॉन्स में ऑथराइज़ेशन कोड को एक्सचेंज करने के लिए, flow.fetch_token
का इस्तेमाल करें:
state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly'], state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store the credentials in the session. # ACTION ITEM for developers: # Store user's access and refresh tokens in your data store if # incorporating this code into your real app. credentials = flow.credentials flask.session['credentials'] = { 'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes}
Ruby
ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदलने के लिए, fetch_access_token!
तरीके का इस्तेमाल करें:
auth_client.code = auth_code auth_client.fetch_access_token!
Node.js के लिए
ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदलने के लिए, getToken
तरीके का इस्तेमाल करें:
const url = require('url'); // Receive the callback from Google's OAuth 2.0 server. if (req.url.startsWith('/oauth2callback')) { // Handle the OAuth 2.0 server response let q = url.parse(req.url, true).query; // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); }
एचटीटीपी/REST
ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदलने के लिए, https://oauth2.googleapis.com/token
एंडपॉइंट को कॉल करें और ये पैरामीटर सेट करें:
फ़ील्ड | |
---|---|
client_id |
API Console Credentials pageसे मिला क्लाइंट आईडी. |
client_secret |
API Console Credentials pageसे मिला क्लाइंट सीक्रेट. |
code |
शुरुआती अनुरोध से मिला ऑथराइज़ेशन कोड. |
grant_type |
जैसा कि OAuth 2.0 में बताया गया है, इस फ़ील्ड का मान authorization_code पर सेट होना चाहिए. |
redirect_uri |
दिए गए API Console
Credentials page दिए गए
client_id के लिए, आपके प्रोजेक्ट के लिए लिस्ट किए गए रीडायरेक्ट यूआरआई में से एक. |
नीचे दिया गया स्निपेट एक नमूना अनुरोध दिखाता है:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=https%3A//oauth2.example.com/code& grant_type=authorization_code
Google, इस अनुरोध का जवाब ऐसे JSON ऑब्जेक्ट के साथ देता है जिसमें कम समय के लिए ऐक्सेस टोकन और रीफ़्रेश टोकन होता है.
ध्यान दें कि रीफ़्रेश टोकन सिर्फ़ तब ही दिया जाता है, जब आपका ऐप्लिकेशन access_type
में offline
Google और #39;
के ऑथराइज़ेशन सर्वर के शुरुआती अनुरोध पर सेट होता है.
रिस्पॉन्स में ये फ़ील्ड शामिल होते हैं:
फ़ील्ड | |
---|---|
access_token |
वह टोकन जो आपका ऐप्लिकेशन, Google API के अनुरोध की अनुमति देने के लिए भेजता है. |
expires_in |
ऐक्सेस टोकन की बची हुई अवधि सेकंड में. |
refresh_token |
नया टोकन पाने के लिए, इस टोकन का इस्तेमाल किया जा सकता है. रीफ़्रेश टोकन तब तक मान्य रहते हैं, जब तक उपयोगकर्ता
ऐक्सेस को निरस्त नहीं कर देता.
ध्यान दें कि यह फ़ील्ड सिर्फ़ तब उपलब्ध होता है, जब आप Google और #39; के ऑथराइज़ेशन सर्वर को शुरुआती अनुरोध में, access_type
पैरामीटर को offline पर सेट करते हैं.
|
scope |
access_token के दिए हुए ऐक्सेस के दायरे में, स्पेस को अलग-अलग करने वाले केस-सेंसिटिव स्ट्रिंग की सूची के तौर पर दिखाया गया है. |
token_type |
लौटाया गया टोकन किस तरह का है. इस समय, इस फ़ील्ड की वैल्यू हमेशा Bearer पर सेट रहती है. |
नीचे दिया गया स्निपेट एक सैंपल जवाब दिखाता है:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Google API कॉलिंग
PHP
ऐक्सेस टोकन का इस्तेमाल करके, Google API को कॉल करें. इसके लिए, यह तरीका अपनाएं:
- अगर आपको
Google_Client
नए ऑब्जेक्ट पर ऐक्सेस टोकन लागू करना है, तोsetAccessToken
तरीके का इस्तेमाल करें. उदाहरण के लिए, अगर आपने उपयोगकर्ता सेशन में ऐक्सेस टोकन सेव किया है, तो:$client->setAccessToken($access_token);
- उस एपीआई के लिए सेवा ऑब्जेक्ट बनाएं जिसे आप कॉल करना चाहते हैं. आप जिस एपीआई को कॉल करना चाहते हैं उसके कंस्ट्रक्टर को अनुमति वाला
Google_Client
ऑब्जेक्ट देकर, सेवा ऑब्जेक्ट बनाएं. उदाहरण के लिए, Drive API को कॉल करने के लिए:$drive = new Google_Service_Drive($client);
- एपीआई सेवा के लिए अनुरोध करें. इसके लिए, सेवा ऑब्जेक्ट के दिए गए इंटरफ़ेस का इस्तेमाल करें.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता की Google Drive में मौजूद फ़ाइलों की सूची बनाने के लिए:
$files = $drive->files->listFiles(array())->getItems();
Python
ऐक्सेस टोकन पाने के बाद, आपका ऐप्लिकेशन उस उपयोगकर्ता टोकन या सेवा खाते के लिए, एपीआई अनुरोधों को अनुमति देने के लिए उस टोकन का इस्तेमाल कर सकता है. एपीआई के लिए सेवा का ऑब्जेक्ट बनाने के लिए, उपयोगकर्ता से जुड़े खास क्रेडेंशियल के क्रेडेंशियल का इस्तेमाल करें. इसके बाद, उस ऑब्जेक्ट का इस्तेमाल करके, अनुमति वाले एपीआई के अनुरोध करें.
- उस एपीआई के लिए सेवा ऑब्जेक्ट बनाएं जिसे आप कॉल करना चाहते हैं. एपीआई और उपयोगकर्ता क्रेडेंशियल की मदद से,
googleapiclient.discovery
लाइब्रेरी'sbuild
के तरीके का इस्तेमाल करके, सेवा का ऑब्जेक्ट बनाएं: उदाहरण के लिए, Drive API के दूसरे वर्शन को कॉल करने के लिए:from googleapiclient.discovery import build drive = build('drive', 'v2', credentials=credentials)
- एपीआई सेवा के लिए अनुरोध करें. इसके लिए, सेवा ऑब्जेक्ट के दिए गए इंटरफ़ेस का इस्तेमाल करें.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता की Google Drive में मौजूद फ़ाइलों की सूची बनाने के लिए:
files = drive.files().list().execute()
Ruby
यह तरीका अपनाकर, Google API को कॉल करने के लिए
auth_client
ऑब्जेक्ट का इस्तेमाल करें:
- उस एपीआई के लिए सेवा ऑब्जेक्ट बनाएं जिसे आप कॉल करना चाहते हैं.
उदाहरण के लिए, Drive API के दूसरे वर्शन को कॉल करने के लिए:
drive = Google::Apis::DriveV2::DriveService.new
- सेवा के लिए क्रेडेंशियल सेट करें:
drive.authorization = auth_client
- एपीआई सेवा का इस्तेमाल करने के लिए,
सेवा ऑब्जेक्ट से मिले
इंटरफ़ेस का इस्तेमाल करें.
उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता की Google Drive में फ़ाइलें लिस्ट करने के लिए:
files = drive.list_files
इसके अलावा, किसी तरीके के लिए options
पैरामीटर देकर, हर तरीके के हिसाब से अनुमति दी जा सकती है:
files = drive.list_files(options: { authorization: auth_client })
Node.js के लिए
ऐक्सेस टोकन पाने और उसे OAuth2
ऑब्जेक्ट पर सेट करने के बाद, ऑब्जेक्ट का इस्तेमाल करके, Google API को कॉल करें. आपका ऐप्लिकेशन, उस उपयोगकर्ता खाते या सेवा खाते की ओर से, एपीआई अनुरोधों को अनुमति देने के लिए उस टोकन का इस्तेमाल कर सकता है. उस एपीआई के लिए सेवा ऑब्जेक्ट बनाएं जिसे आप कॉल करना चाहते हैं.
const { google } = require('googleapis'); // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } });
एचटीटीपी/REST
आपके ऐप्लिकेशन को ऐक्सेस टोकन मिलने के बाद, आप टोकन का इस्तेमाल करके, Google के किसी एपीआई
को कॉल कर सकते हैं. इसके लिए, यह ज़रूरी है कि एपीआई के लिए ज़रूरी ऐक्सेस के दायरे को स्वीकार किया गया हो. ऐसा करने के लिए, ऐक्सेस क्वेरी में एपीआई का ऐक्सेस टोकन शामिल करें. इसके लिए, access_token
क्वेरी पैरामीटर या Authorization
एचटीटीपी हेडर Bearer
वैल्यू शामिल करें. हो सके, तो एचटीटीपी हेडर को प्राथमिकता दी जाती है, क्योंकि क्वेरी लॉग आम तौर पर सर्वर लॉग में दिखते हैं. ज़्यादातर मामलों में, Google API पर अपने कॉल सेट अप करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है. उदाहरण के लिए, Drive Files API पर कॉल करते समय.
आप OAuth 2.0 Playground पर सभी Google API आज़मा सकते हैं और उनके दायरे देख सकते हैं.
एचटीटीपी GET के उदाहरण
Authorization: Bearer
एचटीटीपी
हेडर का इस्तेमाल करके
drive.files
एंडपॉइंट (Drive Files API) को कॉल करने पर यह जैसा दिख सकता है. ध्यान दें कि आपको अपना खुद का ऐक्सेस टोकन देना होगा:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
यहां, access_token
क्वेरी स्ट्रिंग पैरामीटर का इस्तेमाल करके, पुष्टि किए हुए उपयोगकर्ता के लिए उसी एपीआई को कॉल किया गया है:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
curl
के उदाहरण
आप curl
कमांड लाइन ऐप्लिकेशन की मदद से, इन निर्देशों की जांच कर सकते हैं. यहां एक उदाहरण दिया गया है, जो एचटीटीपी हेडर विकल्प का इस्तेमाल करता है (इसका इस्तेमाल करना बेहतर होगा):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
या फिर, क्वेरी स्ट्रिंग पैरामीटर का विकल्प:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
उदाहरण
नीचे दिया गया उदाहरण, उपयोगकर्ता की पुष्टि करने के बाद, उपयोगकर्ता की Google Drive में मौजूद फ़ाइलों की JSON-फ़ॉर्मैट की सूची को प्रिंट करता है. साथ ही, उपयोगकर्ता के Drive मेटाडेटा को ऐक्सेस करने की सहमति देता है.
PHP
यह उदाहरण चलाने के लिए:
- API Consoleमें, रीडायरेक्ट यूआरएल की सूची में स्थानीय मशीन का यूआरएल जोड़ें. उदाहरण के लिए,
http://localhost:8080
जोड़ें. - नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. उदाहरण के लिए:
mkdir ~/php-oauth2-example cd ~/php-oauth2-example
- कंपोज़र का इस्तेमाल करके, PHP के लिए Google API क्लाइंट लाइब्रेरी इंस्टॉल करें:
composer require google/apiclient:^2.0
- नीचे दिए गए कॉन्टेंट का इस्तेमाल करके,
index.php
औरoauth2callback.php
फ़ाइलें बनाएं. - PHP दिखाने के लिए कॉन्फ़िगर किए गए वेब सर्वर के साथ उदाहरण चलाएं. अगर आप PHP 5.4 या इससे नए वर्शन का इस्तेमाल करते हैं, तो आप PHP' पहले से मौजूद टेस्ट वेब सर्वर:
php -S localhost:8080 ~/php-oauth2-example
का इस्तेमाल कर सकते हैं
index.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfig('client_secrets.json'); $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { $client->setAccessToken($_SESSION['access_token']); $drive = new Google_Service_Drive($client); $files = $drive->files->listFiles(array())->getItems(); echo json_encode($files); } else { $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
oauth2callback.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google_Client(); $client->setAuthConfigFile('client_secrets.json'); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); if (! isset($_GET['code'])) { $auth_url = $client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); } else { $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Python
यह उदाहरण फ़्लेक्स फ़्रेमवर्क का इस्तेमाल करता है. यह
http://localhost:8080
पर एक वेब ऐप्लिकेशन चलाता है, जिससे आप OAuth 2.0
फ़्लो की जांच कर सकते हैं. अगर आप उस यूआरएल पर जाते हैं, तो आपको चार लिंक दिखेंगे:
- एपीआई अनुरोध की जांच करना: यह लिंक उस पेज पर ले जाता है जहां एपीआई का सैंपल अनुरोध लागू करने की कोशिश की जाती है. अगर ज़रूरी हो, तो यह अनुमति देने का फ़्लो शुरू करता है. अगर कामयाब होता है, तो पेज एपीआई का रिस्पॉन्स दिखाता है.
- सीधे तौर पर पुष्टि करने की जांच करें: यह लिंक ऐसे पेज पर ले जाता है जो उपयोगकर्ता को ऑथराइज़ेशन फ़्लो के ज़रिए भेजने की कोशिश करता है. ऐप्लिकेशन, उपयोगकर्ता की ओर से एपीआई अनुरोध स्वीकार करने का अनुरोध करता है.
- मौजूदा क्रेडेंशियल निरस्त करें: यह लिंक एक ऐसे पेज पर ले जाता है जो उपयोगकर्ता को ऐप्लिकेशन को पहले दी गई अनुमतियां निरस्त कर देता है.
- फ़्लैक सेशन के क्रेडेंशियल मिटाएं: यह लिंक फ़्लास्क सेशन में सेव किए गए क्रेडेंशियल क्रेडेंशियल को मिटा देता है. इससे आप जान सकते हैं कि अगर आपके ऐप्लिकेशन को पहले ही अनुमति दे चुके उपयोगकर्ता ने नए सेशन में एपीआई अनुरोध लागू करने की कोशिश की, तो क्या होगा. इससे आप उस एपीआई के जवाब भी देख सकते हैं जो आपके ऐप्लिकेशन को तब मिलेगा, जब किसी उपयोगकर्ता ने आपके ऐप्लिकेशन को दी गई अनुमतियां रद्द कर दी हों. साथ ही, आपके ऐप्लिकेशन ने निरस्त ऐक्सेस टोकन के ज़रिए अनुरोध को अनुमति देने की कोशिश की हो.
# -*- coding: utf-8 -*- import os import flask import requests import google.oauth2.credentials import google_auth_oauthlib.flow import googleapiclient.discovery # This variable specifies the name of a file that contains the OAuth 2.0 # information for this application, including its client_id and client_secret. CLIENT_SECRETS_FILE = "client_secret.json" # This OAuth 2.0 access scope allows for full read/write access to the # authenticated user's account and requires requests to use an SSL connection. SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] API_SERVICE_NAME = 'drive' API_VERSION = 'v2' app = flask.Flask(__name__) # Note: A secret key is included in the sample so that it works. # If you use this code in your application, replace this with a truly secret # key. See https://flask.palletsprojects.com/quickstart/#sessions. app.secret_key = 'REPLACE ME - this value is here as a placeholder.' @app.route('/') def index(): return print_index_table() @app.route('/test') def test_api_request(): if 'credentials' not in flask.session: return flask.redirect('authorize') # Load credentials from the session. credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) drive = googleapiclient.discovery.build( API_SERVICE_NAME, API_VERSION, credentials=credentials) files = drive.files().list().execute() # Save credentials back to session in case access token was refreshed. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. flask.session['credentials'] = credentials_to_dict(credentials) return flask.jsonify(**files) @app.route('/authorize') def authorize(): # Create flow instance to manage the OAuth 2.0 Authorization Grant Flow steps. flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES) # The URI created here must exactly match one of the authorized redirect URIs # for the OAuth 2.0 client, which you configured in the API Console. If this # value doesn't match an authorized URI, you will get a 'redirect_uri_mismatch' # error. flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true') # Store the state so the callback can verify the auth server response. flask.session['state'] = state return flask.redirect(authorization_url) @app.route('/oauth2callback') def oauth2callback(): # Specify the state when creating the flow in the callback so that it can # verified in the authorization server response. state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES, state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) # Use the authorization server's response to fetch the OAuth 2.0 tokens. authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store credentials in the session. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. credentials = flow.credentials flask.session['credentials'] = credentials_to_dict(credentials) return flask.redirect(flask.url_for('test_api_request')) @app.route('/revoke') def revoke(): if 'credentials' not in flask.session: return ('You need to <a href="/authorize">authorize</a> before ' + 'testing the code to revoke credentials.') credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) revoke = requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'}) status_code = getattr(revoke, 'status_code') if status_code == 200: return('Credentials successfully revoked.' + print_index_table()) else: return('An error occurred.' + print_index_table()) @app.route('/clear') def clear_credentials(): if 'credentials' in flask.session: del flask.session['credentials'] return ('Credentials have been cleared.<br><br>' + print_index_table()) def credentials_to_dict(credentials): return {'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes} def print_index_table(): return ('<table>' + '<tr><td><a href="/test">Test an API request</a></td>' + '<td>Submit an API request and see a formatted JSON response. ' + ' Go through the authorization flow if there are no stored ' + ' credentials for the user.</td></tr>' + '<tr><td><a href="/authorize">Test the auth flow directly</a></td>' + '<td>Go directly to the authorization flow. If there are stored ' + ' credentials, you still might not be prompted to reauthorize ' + ' the application.</td></tr>' + '<tr><td><a href="/revoke">Revoke current credentials</a></td>' + '<td>Revoke the access token associated with the current user ' + ' session. After revoking credentials, if you go to the test ' + ' page, you should see an <code>invalid_grant</code> error.' + '</td></tr>' + '<tr><td><a href="/clear">Clear Flask session credentials</a></td>' + '<td>Clear the access token currently stored in the user session. ' + ' After clearing the token, if you <a href="/test">test the ' + ' API request</a> again, you should go back to the auth flow.' + '</td></tr></table>') if __name__ == '__main__': # When running locally, disable OAuthlib's HTTPs verification. # ACTION ITEM for developers: # When running in production *do not* leave this option enabled. os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # Specify a hostname and port that are set as a valid redirect URI # for your API project in the Google API Console. app.run('localhost', 8080, debug=True)
Ruby
इस उदाहरण में Sinatra फ़्रेमवर्क का इस्तेमाल किया गया है.
require 'google/apis/drive_v2' require 'google/api_client/client_secrets' require 'json' require 'sinatra' enable :sessions set :session_secret, 'setme' get '/' do unless session.has_key?(:credentials) redirect to('/oauth2callback') end client_opts = JSON.parse(session[:credentials]) auth_client = Signet::OAuth2::Client.new(client_opts) drive = Google::Apis::DriveV2::DriveService.new files = drive.list_files(options: { authorization: auth_client }) "<pre>#{JSON.pretty_generate(files.to_h)}</pre>" end get '/oauth2callback' do client_secrets = Google::APIClient::ClientSecrets.load auth_client = client_secrets.to_authorization auth_client.update!( :scope => 'https://www.googleapis.com/auth/drive.metadata.readonly', :redirect_uri => url('/oauth2callback')) if request['code'] == nil auth_uri = auth_client.authorization_uri.to_s redirect to(auth_uri) else auth_client.code = request['code'] auth_client.fetch_access_token! auth_client.client_secret = nil session[:credentials] = auth_client.to_json redirect to('/') end end
Node.js के लिए
यह उदाहरण चलाने के लिए:
-
API Consoleमें, रीडायरेक्ट यूआरएल की सूची में स्थानीय मशीन का यूआरएल जोड़ें. उदाहरण के लिए,
http://localhost
जोड़ें. - पक्का करें कि आपने LTS, चालू एलटीएस या Node.js के मौजूदा वर्शन को इंस्टॉल कर लिया है.
-
नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. उदाहरण के लिए:
mkdir ~/nodejs-oauth2-example cd ~/nodejs-oauth2-example
-
Install the
Google API Client
Library
for Node.js using npm:
npm install googleapis
-
नीचे दिए गए कॉन्टेंट के हिसाब से
main.js
फ़ाइलें बनाएं. -
उदाहरण चलाएं:
node .\main.js
main.js
const http = require('http'); const https = require('https'); const url = require('url'); const { google } = require('googleapis'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI. * To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true }); /* Global variable that stores user credential in this code example. * ACTION ITEM for developers: * Store user's refresh token in your data store if * incorporating this code into your real app. * For more information on handling refresh tokens, * see https://github.com/googleapis/google-api-nodejs-client#handling-refresh-tokens */ let userCredential = null; async function main() { const server = http.createServer(async function (req, res) { // Example on redirecting user to Google's OAuth 2.0 server. if (req.url == '/') { res.writeHead(301, { "Location": authorizationUrl }); } // Receive the callback from Google's OAuth 2.0 server. if (req.url.startsWith('/oauth2callback')) { // Handle the OAuth 2.0 server response let q = url.parse(req.url, true).query; if (q.error) { // An error response e.g. error=access_denied console.log('Error:' + q.error); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); /** Save credential to the global variable in case access token was refreshed. * ACTION ITEM: In a production app, you likely want to save the refresh token * in a secure persistent database instead. */ userCredential = tokens; // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } }); } } // Example on revoking a token if (req.url == '/revoke') { // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end(); } res.end(); }).listen(80); } main().catch(console.error);
एचटीटीपी/REST
इस Python का उदाहरण, Flask फ़्रेमवर्क और अनुरोधों की लाइब्रेरी का इस्तेमाल करके, OAuth 2.0 वेब फ़्लो को दिखाता है. हमारा सुझाव है कि इस फ़्लो के लिए, Python के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल करें. (Python टैब में दिए गए उदाहरण में क्लाइंट लाइब्रेरी का इस्तेमाल किया गया है.)
import json import flask import requests app = flask.Flask(__name__) CLIENT_ID = '123456789.apps.googleusercontent.com' CLIENT_SECRET = 'abc123' # Read from a file or environmental variable in a real app SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly' REDIRECT_URI = 'http://example.com/oauth2callback' @app.route('/') def index(): if 'credentials' not in flask.session: return flask.redirect(flask.url_for('oauth2callback')) credentials = json.loads(flask.session['credentials']) if credentials['expires_in'] <= 0: return flask.redirect(flask.url_for('oauth2callback')) else: headers = {'Authorization': 'Bearer {}'.format(credentials['access_token'])} req_uri = 'https://www.googleapis.com/drive/v2/files' r = requests.get(req_uri, headers=headers) return r.text @app.route('/oauth2callback') def oauth2callback(): if 'code' not in flask.request.args: auth_uri = ('https://accounts.google.com/o/oauth2/v2/auth?response_type=code' '&client_id={}&redirect_uri={}&scope={}').format(CLIENT_ID, REDIRECT_URI, SCOPE) return flask.redirect(auth_uri) else: auth_code = flask.request.args.get('code') data = {'code': auth_code, 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'grant_type': 'authorization_code'} r = requests.post('https://oauth2.googleapis.com/token', data=data) flask.session['credentials'] = r.text return flask.redirect(flask.url_for('index')) if __name__ == '__main__': import uuid app.secret_key = str(uuid.uuid4()) app.debug = False app.run()
यूआरआई की पुष्टि करने के नियम रीडायरेक्ट करें
यूआरआई को रीडायरेक्ट करने के लिए, Google यहां दिए गए पुष्टि करने के नियमों को लागू करता है. इससे, डेवलपर को अपने ऐप्लिकेशन सुरक्षित रखने में मदद मिलती है. आपके रीडायरेक्ट यूआरआई को इन नियमों का पालन करना चाहिए. डोमेन, होस्ट, पाथ, क्वेरी, स्कीम, और उपयोगकर्ता की जानकारी के बारे में जानने के लिए, आरएफ़सी 3986 सेक्शन 3 देखें. इसका तरीका नीचे बताया गया है.
सत्यापन नियम | |
---|---|
स्कीम |
रीडायरेक्ट यूआरआई को एचटीटीपीएस स्कीम का इस्तेमाल करना चाहिए, न कि सादे एचटीटीपी का. स्थानीय होस्ट यूआरआई (इसमें स्थानीय होस्ट के आईपी पते वाले यूआरएल भी शामिल हैं) पर यह नियम लागू नहीं होता. |
होस्ट |
होस्ट अपरिष्कृत IP पते नहीं हो सकते. स्थानीय होस्ट के आईपी पतों पर यह नियम लागू नहीं होता. |
डोमेन |
“googleusercontent.com” नहीं हो सकते.goo.gl ) तब तक शामिल नहीं किए जा सकते, जब तक डोमेन, ऐप्लिकेशन का मालिक न हो. इसके अलावा, अगर किसी छोटे डोमेन का मालिकाना हक रखने वाला ऐप्लिकेशन उस डोमेन पर रीडायरेक्ट करता है, तो उस यूआरएल को “/google-callback/” के पाथ में या “/google-callback” के साथ खत्म करना होगा. |
उपयोगकर्ता जानकारी |
रीडायरेक्ट यूआरआई में userinfo उप घटक नहीं हो सकता. |
पाथ |
रीडायरेक्ट यूआरआई में पाथ ट्रैवर्सल (जिसे डायरेक्ट्री बैकट्रैकिंग भी कहा जाता है) शामिल नहीं हो सकता. इसे यूआरएल की |
क्वेरी |
रीडायरेक्ट यूआरआई में खुले रीडायरेक्ट शामिल नहीं हो सकते. |
फ़्रैगमेंट |
रीडायरेक्ट यूआरआई में फ़्रैगमेंट वाला कॉम्पोनेंट नहीं हो सकता. |
वर्ण |
रीडायरेक्ट यूआरआई में कुछ खास वर्ण शामिल नहीं हो सकते. इनमें ये शामिल हैं:
|
इंक्रीमेंटल अनुमति
OAuth 2.0 प्रोटोकॉल में, आपका ऐप्लिकेशन ऐसे रिसॉर्स को ऐक्सेस करने की अनुमति मांगता है जिन्हें दायरों से पहचाना जाता है. जब भी आपको अपनी ज़रूरत के समय संसाधनों का अनुरोध करने की अनुमति चाहिए, तो उपयोगकर्ता अनुभव को इस्तेमाल करने का यह सबसे सही तरीका माना जाता है. इस प्रोसेस को चालू करने के लिए, Google का ऑथराइज़ेशन सर्वर, ऑथराइज़ेशन ऑथराइज़ेशन के साथ काम करता है. इस सुविधा की मदद से, आप दायरे का अनुरोध कर सकते हैं और जब उपयोगकर्ता नए दायरे के लिए अनुमति देता है, तब यह एक ऑथराइज़ेशन कोड दिखाता है. इस टोकन के बदले उपयोगकर्ता ने प्रोजेक्ट के लिए सभी दायरों का ऐक्सेस लिया हो.
उदाहरण के लिए, ऐसा ऐप्लिकेशन जो लोगों को संगीत ट्रैक का नमूना लेने और मिक्स बनाने की सुविधा देता है उसे साइन इन करते समय बहुत कम संसाधनों की ज़रूरत हो सकती है. शायद, साइन इन करने वाले व्यक्ति के नाम से ज़्यादा कुछ न हो. हालांकि, भरे हुए मिक्स को सेव करने के लिए, उनके Google Drive का ऐक्सेस ज़रूरी है. ज़्यादातर लोगों को यह स्वाभाविक लगता है कि जब उनसे ऐप्लिकेशन की ज़रूरत होगी, तभी उन्हें अपनी Google Drive का ऐक्सेस मांगा जाए.
इस मामले में, साइन इन के समय ऐप्लिकेशन, सामान्य साइन इन करने के लिए, openid
और
profile
दायरे का अनुरोध कर सकता है. इसके बाद, पहले मिक्स के सेव होने के समय,
https://www.googleapis.com/auth/drive.file
दायरे का
अनुरोध कर सकता है.
इंक्रीमेंटल ऑथराइज़ेशन लागू करने के लिए, आपको ऐक्सेस टोकन के लिए अनुरोध करना सामान्य फ़्लो पूरा करना होगा. हालांकि, यह पक्का करें कि अनुमति के अनुरोध में पहले से दिए गए दायरे शामिल हों. इस तरीके का इस्तेमाल करने पर, आपका ऐप्लिकेशन एक से ज़्यादा ऐक्सेस टोकन को मैनेज नहीं कर पाएगा.
नीचे दिए गए नियम इंक्रीमेंटल ऑथराइज़ेशन से मिले ऐक्सेस टोकन पर लागू होते हैं:
- इस टोकन का इस्तेमाल, ऐसे नए दायरों से जुड़े संसाधनों को ऐक्सेस करने के लिए किया जा सकता है जिन्हें नए और एक साथ करने की अनुमति मिली हो.
- जब आप ऐक्सेस टोकन पाने के लिए, मिली-जुली अनुमति के लिए रीफ़्रेश टोकन का इस्तेमाल करते हैं, तो ऐक्सेस टोकन, मिली-जुली अनुमति दिखाता है. साथ ही, इसका इस्तेमाल रिस्पॉन्स में शामिल किसी भी
scope
वैल्यू के लिए किया जा सकता है. - मिले-जुले अनुमति में, उपयोगकर्ता के एपीआई प्रोजेक्ट को दिए गए सभी दायरे शामिल होते हैं. भले ही, अनुदान के लिए अलग-अलग क्लाइंट से अनुरोध किया गया हो. उदाहरण के लिए, अगर किसी उपयोगकर्ता ने ऐप्लिकेशन के डेस्कटॉप क्लाइंट का इस्तेमाल करके, किसी दायरे का ऐक्सेस दिया है और फिर मोबाइल क्लाइंट के ज़रिए, उसी दायरे में आने के लिए दूसरा दायरा दिया है, तो मिले-जुले अनुमति में दोनों दायरे शामिल होंगे.
- अगर आप ऐसे टोकन को निरस्त करते हैं जो मिले-जुले ऑथराइज़ेशन को दिखाता है, तो इससे जुड़े उपयोगकर्ता की ओर से, सभी अनुमति देने के #&3 स्कोप के ऐक्सेस को निरस्त कर दिया जाता है.
पहला चरण: अनुमति पैरामीटर सेट करना में जाकर, भाषा के हिसाब से बने कोड के सैंपल और दूसरे चरण: Google और #39;s OAuth 2.0 सर्वर पर, सैंपल एचटीटीपी/REST रीडायरेक्ट का इस्तेमाल करने के लिए, इंक्रीमेंटल ऑथराइज़ेशन का इस्तेमाल करें. नीचे दिए गए कोड सैंपल भी वह कोड दिखाते हैं जिसे आपको इंक्रीमेंटल अनुमति का इस्तेमाल करने के लिए जोड़ना होगा.
PHP
$client->setIncludeGrantedScopes(true);
Python
Python में, include_granted_scopes
कीवर्ड के आर्ग्युमेंट को true
पर सेट करें. इससे, यह पक्का हो सकेगा कि अनुमति के अनुरोध में पहले से दिए गए दायरे शामिल हैं. ऐसा हो सकता है कि
include_granted_scopes
, सिर्फ़ कीवर्ड का तर्क न सेट हो, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
Ruby
auth_client.update!( :additional_parameters => {"include_granted_scopes" => "true"} )
Node.js के लिए
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
एचटीटीपी/REST
GET https://accounts.google.com/o/oauth2/v2/auth? client_id=your_client_id& response_type=code& state=state_parameter_passthrough_value& scope=https%3A//www.googleapis.com/auth/drive.file& redirect_uri=https%3A//oauth2.example.com/code& prompt=consent& include_granted_scopes=true
ऐक्सेस टोकन रीफ़्रेश करना (ऑफ़लाइन ऐक्सेस)
ऐक्सेस टोकन समय-समय पर खत्म हो जाते हैं और किसी मिलते-जुलते एपीआई अनुरोध के लिए अमान्य क्रेडेंशियल बन जाते हैं. अगर आपने टोकन से जुड़े दायरों के लिए ऑफ़लाइन ऐक्सेस का अनुरोध किया है, तो उपयोगकर्ता की अनुमति के बिना भी ऐक्सेस टोकन को रीफ़्रेश किया जा सकता है. ऐसा तब भी हो सकता है, जब उपयोगकर्ता मौजूद न हो.
- अगर आप Google API क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं, तो क्लाइंट ऑब्जेक्ट ऐक्सेस टोकन को तब तक रीफ़्रेश करता है, जब तक वह ऑब्जेक्ट, ऑफ़लाइन ऐक्सेस के लिए कॉन्फ़िगर करता है.
- अगर आप किसी क्लाइंट लाइब्रेरी का इस्तेमाल नहीं कर रहे हैं, तो आपको उपयोगकर्ता को Google और #39; OAuth 2.0 सर्वर पर रीडायरेक्ट करते समय,
access_type
एचटीटीपी क्वेरी पैरामीटर कोoffline
पर सेट करना होगा. ऐसे में, जब आप किसी ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदलते हैं, तो Google का ऑथराइज़ेशन सर्वर रीफ़्रेश टोकन दिखाता है. इसके बाद, अगर ऐक्सेस टोकन की समयसीमा खत्म हो जाती है (या किसी दूसरे समय पर), तो आप नया ऐक्सेस टोकन पाने के लिए, रीफ़्रेश टोकन का इस्तेमाल कर सकते हैं.
ऑफ़लाइन ऐक्सेस का अनुरोध करना, ऐसे किसी भी ऐप्लिकेशन के लिए ज़रूरी है जिसे उपयोगकर्ता के मौजूद न होने पर Google API ऐक्सेस करना होता है. उदाहरण के लिए, ऐसा ऐप्लिकेशन जो बैक अप सेवाएं लेने या पहले से तय किए गए समय पर कार्रवाइयां करने की सुविधा देता है उसे उपयोगकर्ता के मौजूद न होने पर भी ऐक्सेस टोकन को रीफ़्रेश करना चाहिए. ऐक्सेस के डिफ़ॉल्ट स्टाइल को online
कहा जाता है.
अनुमति की प्रोसेस के दौरान, सर्वर-साइड वेब ऐप्लिकेशन, इंस्टॉल किए गए ऐप्लिकेशन, और डिवाइस सभी को रीफ़्रेश टोकन मिलते हैं. आम तौर पर, क्लाइंट-साइड (JavaScript) के वेब ऐप्लिकेशन में रीफ़्रेश टोकन का इस्तेमाल नहीं किया जाता है.
PHP
अगर आपके ऐप्लिकेशन को Google API (एपीआई) का ऑफ़लाइन ऐक्सेस चाहिए, तो एपीआई क्लाइंट का ऐक्सेस टाइप offline
पर सेट करें:
$client->setAccessType("offline");
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों को ऑफ़लाइन ऐक्सेस देता है, तो आप उपयोगकर्ता के ऑफ़लाइन होने पर, Google API को ऐक्सेस करने के लिए एपीआई क्लाइंट का इस्तेमाल करना जारी रख सकते हैं. क्लाइंट ऑब्जेक्ट, ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Python
Python में, access_type
कीवर्ड के आर्ग्युमेंट को offline
पर सेट करें. इससे, यह पक्का किया जा सकेगा कि ऐक्सेस करने की अनुमति के लिए, उपयोगकर्ता को फिर से अनुरोध करने की ज़रूरत न पड़े. ऐसा हो सकता है कि access_type
,
सिर्फ़ कीवर्ड का आर्ग्युमेंट न हो, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है.
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों को ऑफ़लाइन ऐक्सेस देता है, तो आप उपयोगकर्ता के ऑफ़लाइन होने पर, Google API को ऐक्सेस करने के लिए एपीआई क्लाइंट का इस्तेमाल करना जारी रख सकते हैं. क्लाइंट ऑब्जेक्ट, ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Ruby
अगर आपके ऐप्लिकेशन को Google API (एपीआई) का ऑफ़लाइन ऐक्सेस चाहिए, तो एपीआई क्लाइंट का ऐक्सेस टाइप offline
पर सेट करें:
auth_client.update!( :additional_parameters => {"access_type" => "offline"} )
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों को ऑफ़लाइन ऐक्सेस देता है, तो आप उपयोगकर्ता के ऑफ़लाइन होने पर, Google API को ऐक्सेस करने के लिए एपीआई क्लाइंट का इस्तेमाल करना जारी रख सकते हैं. क्लाइंट ऑब्जेक्ट, ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
Node.js के लिए
अगर आपके ऐप्लिकेशन को Google API (एपीआई) का ऑफ़लाइन ऐक्सेस चाहिए, तो एपीआई क्लाइंट का ऐक्सेस टाइप offline
पर सेट करें:
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
जब कोई उपयोगकर्ता, अनुरोध किए गए दायरों को ऑफ़लाइन ऐक्सेस देता है, तो आप उपयोगकर्ता के ऑफ़लाइन होने पर, Google API को ऐक्सेस करने के लिए एपीआई क्लाइंट का इस्तेमाल करना जारी रख सकते हैं. क्लाइंट ऑब्जेक्ट, ज़रूरत के हिसाब से ऐक्सेस टोकन को रीफ़्रेश करेगा.
पहुंच टोकन की समय सीमा खत्म हो जाती है. अगर यह लाइब्रेरी खत्म होने वाली है, तो नया ऐक्सेस टोकन अपने-आप पाने के लिए, यह लाइब्रेरी अपने-आप रीफ़्रेश टोकन का इस्तेमाल करेगी. टोकन इवेंट का इस्तेमाल करना, यह पक्का करने का एक आसान तरीका है कि सबसे हाल के टोकन हमेशा सेव किए जाएं:
oauth2Client.on('tokens', (tokens) => { if (tokens.refresh_token) { // store the refresh_token in your secure persistent database console.log(tokens.refresh_token); } console.log(tokens.access_token); });
यह टोकन इवेंट, सिर्फ़ पहली अनुमति के बाद होता है. साथ ही, रीफ़्रेश टोकन पाने के लिए, आपको generateAuthUrl
वाले तरीके का इस्तेमाल करते समय,
offline
पर
access_type
सेट करना होगा. अगर आपने रीफ़्रेश टोकन पाने के लिए सही कंस्ट्रेंट सेट किए बिना, पहले से ही अपने ऐप्लिकेशन को ज़रूरी अनुमतियां दी हुई हैं, तो आपको रीफ़्रेश करने के लिए, ऐप्लिकेशन को फिर से अनुमति देनी होगी.
refresh_token
को बाद में सेट करने के लिए, आप setCredentials
तरीके का इस्तेमाल कर सकते हैं:
oauth2Client.setCredentials({ refresh_token: `STORED_REFRESH_TOKEN` });
क्लाइंट के रीफ़्रेश टोकन मिलने के बाद, अगली बार एपीआई को ऐक्सेस करने के लिए टोकन मिलेंगे. ये टोकन अपने-आप रीफ़्रेश हो जाते हैं.
एचटीटीपी/REST
ऐक्सेस टोकन को रीफ़्रेश करने के लिए, आपका ऐप्लिकेशन एचटीटीपीएसPOST
को Google' के ऑथराइज़ेशन सर्वर (https://oauth2.googleapis.com/token
) को अनुरोध भेजता है. इस अनुरोध में, ये पैरामीटर शामिल होते हैं:
फ़ील्ड | |
---|---|
client_id |
API Consoleसे मिला क्लाइंट आईडी. |
client_secret |
API Consoleसे लिया गया क्लाइंट सीक्रेट. |
grant_type |
जैसा कि OAuth 2.0 में तय किया गया है, इस फ़ील्ड का मान refresh_token पर सेट होना चाहिए. |
refresh_token |
ऑथराइज़ेशन कोड एक्सचेंज से मिला रीफ़्रेश टोकन. |
नीचे दिया गया स्निपेट एक नमूना अनुरोध दिखाता है:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
जब तक उपयोगकर्ता, ऐप्लिकेशन को दिए गए ऐक्सेस को निरस्त नहीं करता, तब तक टोकन सर्वर एक JSON ऑब्जेक्ट दिखाता है जिसमें नया ऐक्सेस टोकन शामिल होता है. नीचे दिया गया स्निपेट एक सैंपल जवाब दिखाता है:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
ध्यान दें कि जारी किए जाने वाले रीफ़्रेश टोकन की संख्या सीमित होती है. एक सीमा हर क्लाइंट/उपयोगकर्ता के हिसाब से लागू होती है. वहीं, दूसरी क्वेरी सभी उपयोगकर्ताओं के लिए होती है. आपको रीफ़्रेश टोकन को लंबे समय तक स्टोरेज में सेव करना चाहिए. साथ ही, जब तक वे मान्य रहें, तब तक इनका इस्तेमाल करते रहना चाहिए. अगर आपका ऐप्लिकेशन, बहुत ज़्यादा रीफ़्रेश टोकन का अनुरोध करता है, तो यह इन सीमाओं में आ सकता है. ऐसा होने पर, पुराने रीफ़्रेश टोकन काम करना बंद कर देंगे.
टोकन निरस्त करना
कुछ मामलों में, हो सकता है कि उपयोगकर्ता किसी ऐप्लिकेशन को दिया गया ऐक्सेस निरस्त करना चाहे. उपयोगकर्ता खाता सेटिंग पर जाकर ऐक्सेस को निरस्त कर सकता है. ज़्यादा जानकारी के लिए, तीसरे पक्ष की साइटों और ऐप्लिकेशन के ऐक्सेस वाले सेक्शन या ऐप्लिकेशन को हटाने का सेक्शन और सहायता दस्तावेज़ देखें.
किसी ऐप्लिकेशन के लिए दिए गए ऐक्सेस को प्रोग्रामैटिक तौर पर निरस्त करना भी संभव है. प्रोग्राम से जुड़ा निरस्त करना तब अहम होता है, जब उपयोगकर्ता सदस्यता छोड़ता है, ऐप्लिकेशन को हटाता है या ऐप्लिकेशन के लिए ज़रूरी एपीआई रिसॉर्स में काफ़ी बदलाव होता है. दूसरे शब्दों में, हटाने की प्रक्रिया के कुछ हिस्से में एक एपीआई अनुरोध शामिल हो सकता है, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन को पहले दी गई अनुमतियां हटा दी गई हैं.
PHP
किसी टोकन को प्रोग्रामैटिक तौर पर निरस्त करने के लिए, revokeToken()
पर कॉल करें:
$client->revokeToken();
Python
किसी टोकन को प्रोग्रामैटिक तौर पर निरस्त करने के लिए, https://oauth2.googleapis.com/revoke
से अनुरोध करें कि टोकन को पैरामीटर के तौर पर शामिल किया गया हो और
Content-Type
हेडर को सेट किया गया हो:
requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'})
Ruby
किसी टोकन को प्रोग्रामैटिक तौर पर निरस्त करने के लिए, oauth2.revoke
एंडपॉइंट के लिए एचटीटीपी अनुरोध करें:
uri = URI('https://oauth2.googleapis.com/revoke') response = Net::HTTP.post_form(uri, 'token' => auth_client.access_token)
टोकन, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन किसी ऐक्सेस टोकन के तौर पर है और उसके पास रीफ़्रेश टोकन मौजूद है, तो रीफ़्रेश टोकन भी निरस्त कर दिया जाएगा.
अगर रद्द करने की प्रोसेस पूरी हो गई है, तो जवाब का स्टेटस कोड 200
है. गड़बड़ी की स्थितियों के लिए, स्थिति कोड 400
के साथ गड़बड़ी कोड दिखता है.
Node.js के लिए
टोकन को प्रोग्रामैटिक तौर पर निरस्त करने के लिए, /revoke
एंडपॉइंट पर एचटीटीपीएस पोस्ट का अनुरोध करें:
const https = require('https'); // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end();
टोकन पैरामीटर, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन किसी ऐक्सेस टोकन के तौर पर है और उसके पास रीफ़्रेश टोकन मौजूद है, तो रीफ़्रेश टोकन भी निरस्त कर दिया जाएगा.
अगर रद्द करने की प्रोसेस पूरी हो गई है, तो जवाब का स्टेटस कोड 200
है. गड़बड़ी की स्थितियों के लिए, स्थिति कोड 400
के साथ गड़बड़ी कोड दिखता है.
एचटीटीपी/REST
टोकन को प्रोग्रामैटिक तौर पर निरस्त करने के लिए, आपका ऐप्लिकेशन
https://oauth2.googleapis.com/revoke
से अनुरोध करता है और टोकन को पैरामीटर के तौर पर शामिल करता है:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
टोकन, ऐक्सेस टोकन या रीफ़्रेश टोकन हो सकता है. अगर टोकन किसी ऐक्सेस टोकन के तौर पर है और उसके हिसाब से कोई रीफ़्रेश टोकन मौजूद है, तो रीफ़्रेश टोकन भी निरस्त कर दिया जाएगा.
अगर रद्द करने की प्रोसेस पूरी हो गई है, तो रिस्पॉन्स का एचटीटीपी स्टेटस कोड 200
है. गड़बड़ी की स्थितियों के लिए, एचटीटीपी स्टेटस कोड 400
को गड़बड़ी कोड के साथ दिखाया जाता है.