वेब सर्वर ऐप्लिकेशन के लिए OAuth 2.0 का इस्तेमाल करना

इस दस्तावेज़ में बताया गया है कि Google API को ऐक्सेस करने के लिए, वेब सर्वर ऐप्लिकेशन Google API की क्लाइंट लाइब्रेरी या Google OAuth 2.0 एंडपॉइंट का इस्तेमाल करके, OAuth 2.0 का इस्तेमाल कैसे करते हैं.

OAuth 2.0 की मदद से, उपयोगकर्ता अपने उपयोगकर्ता नाम, पासवर्ड, और दूसरी जानकारी को सुरक्षित रखते हुए, किसी ऐप्लिकेशन के साथ खास डेटा शेयर कर सकते हैं. उदाहरण के लिए, कोई ऐप्लिकेशन OAuth 2.0 का इस्तेमाल करके उपयोगकर्ताओं से फ़ाइलों को उनके Google Drive में सेव करने की अनुमति ले सकता है.

यह OAuth 2.0 फ़्लो, खास तौर पर उपयोगकर्ता की अनुमति के लिए है. यह उन ऐप्लिकेशन के लिए डिज़ाइन किया गया है जो गोपनीय जानकारी सेव कर सकते हैं और स्थिति को बनाए रख सकते हैं. जब उपयोगकर्ता ऐप्लिकेशन से इंटरैक्ट करता है या उपयोगकर्ता के ऐप्लिकेशन छोड़ने के बाद, एपीआई ऐक्सेस कर सकता है, तो यह ठीक से काम करने वाला वेब ऐप्लिकेशन हो सकता है.

वेब सर्वर ऐप्लिकेशन, एपीआई अनुरोधों को अनुमति देने के लिए भी अक्सर सेवा खातों का इस्तेमाल करते हैं. खास तौर पर तब, जब Cloud API, उपयोगकर्ता के डेटा के बजाय, प्रोजेक्ट पर आधारित डेटा को ऐक्सेस करने के लिए कॉल करते हैं. वेब सर्वर ऐप्लिकेशन, उपयोगकर्ता की अनुमति के साथ सेवा खातों का इस्तेमाल कर सकते हैं.

क्लाइंट लाइब्रेरी

पेज पर भाषा के हिसाब से, OAuth 2.0 के इस्तेमाल को लागू करने के लिए, Google API क्लाइंट लाइब्रेरी का इस्तेमाल किया गया है. कोड सैंपल चलाने के लिए, आपको पहले अपनी भाषा के लिए क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.

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

सर्वर साइड ऐप्लिकेशन के लिए Google API क्लाइंट लाइब्रेरी इन भाषाओं में उपलब्ध हैं:

ज़रूरी शर्तें

अपने प्रोजेक्ट के एपीआई चालू करें

Google API का इस्तेमाल करने वाले किसी भी ऐप्लिकेशन को API Consoleमें उन एपीआई को चालू करना होगा.

अपने प्रोजेक्ट के लिए एपीआई चालू करने का तरीका:

  1. Open the API Library Google API Consoleमें.
  2. If prompted, select a project, or create a new one.
  3. API Library प्रॉडक्ट की उपलब्धता और लोकप्रियता के हिसाब से, उपलब्ध सभी एपीआई की सूची बनाता है. आपको जिस एपीआई को चालू करना है, अगर वह सूची में नहीं दिख रहा है, तो उसे खोजने के लिए 'खोजें' का इस्तेमाल करें. इसके अलावा, उस प्रॉडक्ट फ़ैमिली में सभी देखें पर क्लिक करें जिससे वह जुड़ा है.
  4. वह एपीआई चुनें जिसे चालू करना है. इसके बाद, चालू करें बटन पर क्लिक करें.
  5. If prompted, enable billing.
  6. If prompted, read and accept the API's Terms of Service.

ऑथराइज़ेशन क्रेडेंशियल बनाएं

Google एपीआई को ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करने वाले किसी भी ऐप्लिकेशन के पास ऐसे क्रेडेंशियल क्रेडेंशियल होने चाहिए जो Google के OAuth 2.0 सर्वर पर ऐप्लिकेशन की पहचान करते हों. अपने प्रोजेक्ट के लिए क्रेडेंशियल बनाने का तरीका यहां बताया गया है. फिर आपके ऐप्लिकेशन उन क्रेडेंशियल को ऐक्सेस करने के लिए क्रेडेंशियल का इस्तेमाल कर सकते हैं जिन्हें आपने उस प्रोजेक्ट के लिए चालू किया है.

  1. Go to the Credentials page.
  2. क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी पर क्लिक करें.
  3. वेब ऐप्लिकेशन टाइप चुनें.
  4. फ़ॉर्म भरें और बनाएं पर क्लिक करें. 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 कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:

  • इंस्टॉल किया गया कमांड-लाइन इंटरफ़ेस (सीएलआई) और JSON एक्सटेंशन के साथ, PHP 5.6 या इसके बाद का वर्शन.
  • कंपोज़र डिपेंडेंसी मैनेजमेंट टूल.
  • PHP के लिए Google API क्लाइंट लाइब्रेरी:

    composer require google/apiclient:^2.10

Python

इस दस्तावेज़ में Python कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:

  • 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 2.2.2 या इसके बाद का वर्शन
  • Ruby के लिए Google API क्लाइंट लाइब्रेरी:

    gem install google-api-client
  • Syatra Ruby वेब ऐप्लिकेशन फ़्रेमवर्क.

    gem install sinatra

Node.js

इस दस्तावेज़ में Node.js कोड के नमूने चलाने के लिए, आपको इनकी ज़रूरत होगी:

  • Node.js का रखरखाव, चालू एलटीएस या मौजूदा रिलीज़.
  • Google API Node.js क्लाइंट:

    npm install googleapis

एचटीटीपी/REST

OAuth 2.0 एंडपॉइंट को सीधे कॉल करने के लिए, आपको किसी लाइब्रेरी को इंस्टॉल करने की ज़रूरत नहीं है.

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

आगे दिए गए तरीके से यह पता चलता है कि आपका ऐप्लिकेशन Google के OAuth 2.0 सर्वर से कैसे इंटरैक्ट करता है. इस तरीके से, उपयोगकर्ता की ओर से एपीआई अनुरोध करने की सहमति ली जाती है. आपके ऐप्लिकेशन को सहमति देनी होगी, ताकि वह Google एपीआई से जुड़ा ऐसा अनुरोध लागू कर सके जिसके लिए उपयोगकर्ता की अनुमति ज़रूरी है.

नीचे दी गई सूची में इन चरणों के बारे में बताया गया है:

  1. आपका ऐप्लिकेशन उन अनुमतियों की पहचान करता है जिनकी उसे ज़रूरत है.
  2. आपका ऐप्लिकेशन, अनुमतियों के अनुरोध के साथ, उपयोगकर्ता को Google पर रीडायरेक्ट करता है.
  3. उपयोगकर्ता तय करता है कि उसे आपके ऐप्लिकेशन के लिए अनुमतियां देनी हैं या नहीं.
  4. आपके ऐप्लिकेशन से पता चलता है कि उपयोगकर्ता ने क्या निर्णय लिया.
  5. अगर उपयोगकर्ता ने अनुरोध की गई अनुमतियां दे दी हैं, तो आपका ऐप्लिकेशन उपयोगकर्ता की ओर से एपीआई अनुरोध करने के लिए ज़रूरी टोकन फिर से हासिल करता है.

पहला चरण: अनुमति देने वाले पैरामीटर सेट करना

सबसे पहले, अनुमति के लिए अनुरोध करें. वह अनुरोध आपके ऐप्लिकेशन की पहचान करने वाले पैरामीटर सेट करता है और उन अनुमतियों के बारे में बताता है जिन्हें उपयोगकर्ता से आपके ऐप्लिकेशन को देने के लिए कहा जाएगा.

  • अगर आप OAuth 2.0 की पुष्टि करने और अनुमति देने के लिए, Google क्लाइंट लाइब्रेरी का इस्तेमाल करते हैं, तो आप एक ऐसा ऑब्जेक्ट बनाते और कॉन्फ़िगर करते हैं जो इन पैरामीटर के बारे में बताता हो.
  • अगर Google OAuth 2.0 एंडपॉइंट को सीधे तौर पर कॉल किया जाता है, तो एक यूआरएल जनरेट होगा और उस यूआरएल के लिए पैरामीटर सेट किए जाएंगे.

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

PHP

नीचे दिया गया कोड स्निपेट, Google\Client() ऑब्जेक्ट बनाता है, जिससे अनुमति के अनुरोध में पैरामीटर के बारे में पता चलता है.

वह ऑब्जेक्ट आपके ऐप्लिकेशन की पहचान करने के लिए, आपकी client_secret.json फ़ाइल की जानकारी का इस्तेमाल करता है. उस फ़ाइल के बारे में ज़्यादा जानने के लिए, अनुमति देने वाले क्रेडेंशियल बनाना देखें.) ऑब्जेक्ट उन दायरों की भी पहचान करता है जिन्हें ऐक्सेस करने की कोशिश आपका ऐप्लिकेशन कर रहा है. साथ ही, यह आपके ऐप्लिकेशन के ऑथराइज़ेशन एंडपॉइंट के यूआरएल की भी पहचान करता है. यह एंडपॉइंट, Google के 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 फ़ाइल से अनुमति देने वाले क्रेडेंशियल लोड करने के लिए, setAuthConfig फ़ंक्शन को कॉल करें.

$client = new Google\Client();
$client->setAuthConfig('client_secret.json');
redirect_uri ज़रूरी

इससे तय होता है कि एपीआई सर्वर, उपयोगकर्ता के पुष्टि करने की प्रक्रिया पूरी करने के बाद, उसे कहां रीडायरेक्ट करता है. वैल्यू, OAuth 2.0 क्लाइंट के लिए, अनुमति वाले किसी एक रीडायरेक्ट यूआरआई से पूरी तरह मेल खानी चाहिए. इस यूआरआई को आपने अपने क्लाइंट API Console Credentials pageमें कॉन्फ़िगर किया था. अगर यह वैल्यू, दिए गए client_id के लिए अनुमति वाले रीडायरेक्ट यूआरआई से मेल नहीं खाती, तो आपको redirect_uri_mismatch गड़बड़ी मिलेगी.

ध्यान दें कि http या https स्कीम, केस, और पीछे लगने वाला स्लैश ('/') सभी मेल खाने चाहिए.

इस वैल्यू को PHP में सेट करने के लिए, setRedirectUri फ़ंक्शन को कॉल करें. ध्यान दें कि आपको दिए गए client_id के लिए, एक मान्य रीडायरेक्ट यूआरआई के बारे में बताना होगा.

$client->setRedirectUri('https://oauth2.example.com/code');
scope ज़रूरी

स्पेस में अलग-अलग दायरों के बारे में जानकारी देने वाली सूची. इसमें ऐसे संसाधनों की पहचान की गई है जिन्हें आपका ऐप्लिकेशन उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. इन वैल्यू की मदद से, उपयोगकर्ता को सहमति वाली स्क्रीन दिखती है.

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

इस वैल्यू को PHP में सेट करने के लिए, addScope फ़ंक्शन को कॉल करें:

$client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY);

हमारा सुझाव है कि जहां भी हो सके, आपके आवेदन में संदर्भ के तौर पर अनुमति का दायरा बढ़ाने का अनुरोध करें. इंक्रीमेंटल अनुमति की मदद से, उपयोगकर्ता के डेटा को ऐक्सेस करने का अनुरोध करके, उपयोगकर्ताओं को यह समझने में आसानी होती है कि आपके ऐप्लिकेशन को उनका ऐक्सेस क्यों चाहिए.

access_type सुझाया गया

इससे पता चलता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर की मान्य वैल्यू online होती हैं. यह डिफ़ॉल्ट वैल्यू है और offline.

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

इस वैल्यू को PHP में सेट करने के लिए, setAccessType फ़ंक्शन को कॉल करें:

$client->setAccessType('offline');
state सुझाया गया

ऐसे किसी भी स्ट्रिंग मान की जानकारी देता है, जिसका इस्तेमाल आपका ऐप्लिकेशन आपके अनुमति के अनुरोध और अनुमति देने वाले सर्वर के जवाब के बीच स्थिति बनाए रखने के लिए करता है. जब उपयोगकर्ता आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार कर लेता है, तब सर्वर सटीक रूप से वह वैल्यू दिखाता है जिसे आपने redirect_uri के name=value क्वेरी वाले कॉम्पोनेंट (?) में भेजा है.

इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को अपने ऐप्लिकेशन में सही संसाधन पर भेजना, गैर-ज़रूरी जानकारी भेजना, और क्रॉस-साइट अनुरोध को कम करना. आपके redirect_uri का अनुमान लगाया जा सकता है. इसलिए, state वैल्यू का इस्तेमाल करने से, इस बात का भरोसा बढ़ सकता है कि पुष्टि करने के अनुरोध की वजह से, आने वाला कनेक्शन भी कनेक्ट हो. अगर कोई रैंडम स्ट्रिंग जनरेट की जाती है या किसी कुकी के हैश को कोड में बदला जाता है, तो क्लाइंट के स्टेटस को कैप्चर करने वाले रिस्पॉन्स की पुष्टि की जा सकती है. इसके अलावा, रिस्पॉन्स को मान्य बनाने के लिए, यह पक्का करें कि अनुरोध और रिस्पॉन्स एक ही ब्राउज़र में जनरेट हुए हों. इस तरह, क्रॉस-साइट अनुरोध से जुड़े जालसाज़ी से बचने के लिए आपको सुरक्षा मिलती है. state टोकन बनाने और उसकी पुष्टि करने के उदाहरण के लिए, OpenID Connect का दस्तावेज़ देखें.

इस वैल्यू को PHP में सेट करने के लिए, setState फ़ंक्शन को कॉल करें:

$client->setState($sample_passthrough_value);
include_granted_scopes ज़रूरी नहीं

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

इस वैल्यू को PHP में सेट करने के लिए, setIncludeGrantedScopes फ़ंक्शन को कॉल करें:

$client->setIncludeGrantedScopes(true);
login_hint ज़रूरी नहीं

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

पैरामीटर वैल्यू को किसी ईमेल पते या sub आइडेंटिफ़ायर पर सेट करें, जो उपयोगकर्ता के Google आईडी के बराबर होता है.

इस वैल्यू को PHP में सेट करने के लिए, setLoginHint फ़ंक्शन को कॉल करें:

$client->setLoginHint('None');
prompt ज़रूरी नहीं

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

इस वैल्यू को PHP में सेट करने के लिए, setApprovalPrompt फ़ंक्शन को कॉल करें:

$client->setApprovalPrompt('consent');

ये वैल्यू हो सकती हैं:

none कोई भी पुष्टि या सहमति वाली स्क्रीन न दिखाएं. अन्य वैल्यू के साथ जानकारी देना ज़रूरी नहीं है.
consent उपयोगकर्ता से सहमति देने का अनुरोध करें.
select_account खाता चुनने के लिए, उपयोगकर्ता से अनुरोध करें.

Python

यह कोड स्निपेट, google-auth-oauthlib.flow अनुरोध का इस्तेमाल करके, अनुमति देने का अनुरोध तैयार करता है.

यह कोड एक Flow ऑब्जेक्ट बनाता है. यह client_secret.json फ़ाइल की उस जानकारी का इस्तेमाल करके आपके ऐप्लिकेशन की पहचान करता है जिसे आपने ऑथराइज़ेशन क्रेडेंशियल बनाने के बाद डाउनलोड किया था. वह ऑब्जेक्ट उन दायरों की भी पहचान करता है जिन्हें आपका ऐप्लिकेशन ऐक्सेस करने की अनुमति मांग रहा है. साथ ही, यह आपके ऐप्लिकेशन के ऑथराइज़ेशन एंडपॉइंट के यूआरएल की भी पहचान करता है, जो Google के 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 फ़ाइल से Client-ID पाने के लिए, from_client_secrets_file तरीके पर कॉल करें. (इसके अलावा, from_client_config तरीके का भी इस्तेमाल किया जा सकता है, जो क्लाइंट कॉन्फ़िगरेशन को पास करता है, क्योंकि यह क्लाइंट सीक्रेट फ़ाइल में दिखता है, लेकिन फ़ाइल को ऐक्सेस नहीं करता.)

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

ध्यान दें कि http या https स्कीम, केस, और पीछे लगने वाला स्लैश ('/') सभी मेल खाने चाहिए.

इस वैल्यू को Python में सेट करने के लिए, flow ऑब्जेक्ट की redirect_uri प्रॉपर्टी सेट करें:

flow.redirect_uri = 'https://oauth2.example.com/code'
scope ज़रूरी

दायरों की सूची, उन रिसॉर्स की पहचान करती है जिन्हें आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. इन वैल्यू की मदद से, उपयोगकर्ता को सहमति वाली स्क्रीन दिखती है.

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

Python में, उसी तरीके का इस्तेमाल करें जिससे आप client_id को सेट करके दायरे की सूची तय करते हैं.

flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
    'client_secret.json',
    scopes=['https://www.googleapis.com/auth/drive.metadata.readonly'])

हमारा सुझाव है कि जहां भी हो सके, आपके आवेदन में संदर्भ के तौर पर अनुमति का दायरा बढ़ाने का अनुरोध करें. इंक्रीमेंटल अनुमति की मदद से, उपयोगकर्ता के डेटा को ऐक्सेस करने का अनुरोध करके, उपयोगकर्ताओं को यह समझने में आसानी होती है कि आपके ऐप्लिकेशन को उनका ऐक्सेस क्यों चाहिए.

access_type सुझाया गया

इससे पता चलता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर की मान्य वैल्यू online होती हैं. यह डिफ़ॉल्ट वैल्यू है और offline.

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

Python में, flow.authorization_url तरीके को कॉल करते समय, access_type को कीवर्ड आर्ग्युमेंट के तौर पर सेट करके, access_type पैरामीटर सेट करें:

authorization_url, state = flow.authorization_url(
    access_type='offline',
    include_granted_scopes='true')
state सुझाया गया

ऐसे किसी भी स्ट्रिंग मान की जानकारी देता है, जिसका इस्तेमाल आपका ऐप्लिकेशन आपके अनुमति के अनुरोध और अनुमति देने वाले सर्वर के जवाब के बीच स्थिति बनाए रखने के लिए करता है. जब उपयोगकर्ता आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार कर लेता है, तब सर्वर सटीक रूप से वह वैल्यू दिखाता है जिसे आपने redirect_uri के name=value क्वेरी वाले कॉम्पोनेंट (?) में भेजा है.

इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को अपने ऐप्लिकेशन में सही संसाधन पर भेजना, गैर-ज़रूरी जानकारी भेजना, और क्रॉस-साइट अनुरोध को कम करना. आपके redirect_uri का अनुमान लगाया जा सकता है. इसलिए, state वैल्यू का इस्तेमाल करने से, इस बात का भरोसा बढ़ सकता है कि पुष्टि करने के अनुरोध की वजह से, आने वाला कनेक्शन भी कनेक्ट हो. अगर कोई रैंडम स्ट्रिंग जनरेट की जाती है या किसी कुकी के हैश को कोड में बदला जाता है, तो क्लाइंट के स्टेटस को कैप्चर करने वाले रिस्पॉन्स की पुष्टि की जा सकती है. इसके अलावा, रिस्पॉन्स को मान्य बनाने के लिए, यह पक्का करें कि अनुरोध और रिस्पॉन्स एक ही ब्राउज़र में जनरेट हुए हों. इस तरह, क्रॉस-साइट अनुरोध से जुड़े जालसाज़ी से बचने के लिए आपको सुरक्षा मिलती है. state टोकन बनाने और उसकी पुष्टि करने के उदाहरण के लिए, OpenID Connect का दस्तावेज़ देखें.

Python में, flow.authorization_url तरीके को कॉल करते समय state पैरामीटर को कीवर्ड आर्ग्युमेंट के तौर पर सेट करके, state पैरामीटर सेट करें:

authorization_url, state = flow.authorization_url(
    access_type='offline',
    state=sample_passthrough_value,
    include_granted_scopes='true')
include_granted_scopes ज़रूरी नहीं

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

Python में, flow.authorization_url तरीके को कॉल करते समय, include_granted_scopes को कीवर्ड आर्ग्युमेंट के तौर पर सेट करके, include_granted_scopes पैरामीटर सेट करें:

authorization_url, state = flow.authorization_url(
    access_type='offline',
    include_granted_scopes='true')
login_hint ज़रूरी नहीं

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

पैरामीटर वैल्यू को किसी ईमेल पते या sub आइडेंटिफ़ायर पर सेट करें, जो उपयोगकर्ता के Google आईडी के बराबर होता है.

Python में, flow.authorization_url तरीके को कॉल करते समय, login_hint को कीवर्ड आर्ग्युमेंट के तौर पर सेट करके, login_hint पैरामीटर सेट करें:

authorization_url, state = flow.authorization_url(
    access_type='offline',
    login_hint='None',
    include_granted_scopes='true')
prompt ज़रूरी नहीं

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

Python में, flow.authorization_url तरीके को कॉल करते समय prompt पैरामीटर को कीवर्ड आर्ग्युमेंट के तौर पर सेट करके, prompt पैरामीटर सेट करें:

authorization_url, state = flow.authorization_url(
      access_type='offline',
      prompt='consent',
      include_granted_scopes='true')

ये वैल्यू हो सकती हैं:

none कोई भी पुष्टि या सहमति वाली स्क्रीन न दिखाएं. अन्य वैल्यू के साथ जानकारी देना ज़रूरी नहीं है.
consent उपयोगकर्ता से सहमति देने का अनुरोध करें.
select_account खाता चुनने के लिए, उपयोगकर्ता से अनुरोध करें.

Ruby

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

वेब सर्वर ऐप्लिकेशन के लिए, Google की अनुमति देने वाला सर्वर यहां दिए गए क्वेरी स्ट्रिंग पैरामीटर का इस्तेमाल करता है:

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

आपके ऐप्लिकेशन का क्लाइंट आईडी. यह वैल्यू API Console Credentials pageमें देखी जा सकती है.

redirect_uri ज़रूरी

इससे तय होता है कि एपीआई सर्वर, उपयोगकर्ता के पुष्टि करने की प्रक्रिया पूरी करने के बाद, उसे कहां रीडायरेक्ट करता है. वैल्यू, OAuth 2.0 क्लाइंट के लिए, अनुमति वाले किसी एक रीडायरेक्ट यूआरआई से पूरी तरह मेल खानी चाहिए. इस यूआरआई को आपने अपने क्लाइंट API Console Credentials pageमें कॉन्फ़िगर किया था. अगर यह वैल्यू, दिए गए client_id के लिए अनुमति वाले रीडायरेक्ट यूआरआई से मेल नहीं खाती, तो आपको redirect_uri_mismatch गड़बड़ी मिलेगी.

ध्यान दें कि http या https स्कीम, केस, और पीछे लगने वाला स्लैश ('/') सभी मेल खाने चाहिए.

response_type ज़रूरी

इससे तय होता है कि Google OAuth 2.0 एंडपॉइंट से, ऑथराइज़ेशन कोड मिलता है या नहीं.

वेब सर्वर ऐप्लिकेशन के लिए पैरामीटर वैल्यू को code पर सेट करें.

scope ज़रूरी

स्पेस में अलग-अलग दायरों के बारे में जानकारी देने वाली सूची. इसमें ऐसे संसाधनों की पहचान की गई है जिन्हें आपका ऐप्लिकेशन उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. इन वैल्यू की मदद से, उपयोगकर्ता को सहमति वाली स्क्रीन दिखती है.

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

हमारा सुझाव है कि जहां भी हो सके, आपके आवेदन में संदर्भ के तौर पर अनुमति का दायरा बढ़ाने का अनुरोध करें. इंक्रीमेंटल अनुमति की मदद से, उपयोगकर्ता के डेटा को ऐक्सेस करने का अनुरोध करके, उपयोगकर्ताओं को यह समझने में आसानी होती है कि आपके ऐप्लिकेशन को उनका ऐक्सेस क्यों चाहिए.

access_type सुझाया गया

इससे पता चलता है कि आपका ऐप्लिकेशन, ब्राउज़र में उपयोगकर्ता के मौजूद न होने पर ऐक्सेस टोकन को रीफ़्रेश कर सकता है या नहीं. पैरामीटर की मान्य वैल्यू online होती हैं. यह डिफ़ॉल्ट वैल्यू है और offline.

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

state सुझाया गया

ऐसे किसी भी स्ट्रिंग मान की जानकारी देता है, जिसका इस्तेमाल आपका ऐप्लिकेशन आपके अनुमति के अनुरोध और अनुमति देने वाले सर्वर के जवाब के बीच स्थिति बनाए रखने के लिए करता है. जब उपयोगकर्ता आपके ऐप्लिकेशन के ऐक्सेस के अनुरोध को स्वीकार या अस्वीकार कर लेता है, तब सर्वर सटीक रूप से वह वैल्यू दिखाता है जिसे आपने redirect_uri के name=value क्वेरी वाले कॉम्पोनेंट (?) में भेजा है.

इस पैरामीटर का इस्तेमाल कई कामों के लिए किया जा सकता है. जैसे, उपयोगकर्ता को अपने ऐप्लिकेशन में सही संसाधन पर भेजना, गैर-ज़रूरी जानकारी भेजना, और क्रॉस-साइट अनुरोध को कम करना. आपके redirect_uri का अनुमान लगाया जा सकता है. इसलिए, state वैल्यू का इस्तेमाल करने से, इस बात का भरोसा बढ़ सकता है कि पुष्टि करने के अनुरोध की वजह से, आने वाला कनेक्शन भी कनेक्ट हो. अगर कोई रैंडम स्ट्रिंग जनरेट की जाती है या किसी कुकी के हैश को कोड में बदला जाता है, तो क्लाइंट के स्टेटस को कैप्चर करने वाले रिस्पॉन्स की पुष्टि की जा सकती है. इसके अलावा, रिस्पॉन्स को मान्य बनाने के लिए, यह पक्का करें कि अनुरोध और रिस्पॉन्स एक ही ब्राउज़र में जनरेट हुए हों. इस तरह, क्रॉस-साइट अनुरोध से जुड़े जालसाज़ी से बचने के लिए आपको सुरक्षा मिलती है. state टोकन बनाने और उसकी पुष्टि करने के उदाहरण के लिए, OpenID Connect का दस्तावेज़ देखें.

include_granted_scopes ज़रूरी नहीं

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

login_hint ज़रूरी नहीं

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

पैरामीटर वैल्यू को किसी ईमेल पते या sub आइडेंटिफ़ायर पर सेट करें, जो उपयोगकर्ता के Google आईडी के बराबर होता है.

prompt ज़रूरी नहीं

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

ये वैल्यू हो सकती हैं:

none कोई भी पुष्टि या सहमति वाली स्क्रीन न दिखाएं. अन्य वैल्यू के साथ जानकारी देना ज़रूरी नहीं है.
consent उपयोगकर्ता से सहमति देने का अनुरोध करें.
select_account खाता चुनने के लिए, उपयोगकर्ता से अनुरोध करें.

दूसरा चरण: Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करना

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

PHP

  1. Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए, एक यूआरएल जनरेट करें:
    $auth_url = $client->createAuthUrl();
  2. उपयोगकर्ता को $auth_url पर रीडायरेक्ट करें:
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));

Python

इस उदाहरण में, फ़्लास्क वेब ऐप्लिकेशन फ़्रेमवर्क का इस्तेमाल करके, उपयोगकर्ता को अनुमति देने वाले यूआरएल पर रीडायरेक्ट करने का तरीका बताया गया है:

return flask.redirect(authorization_url)

Ruby

  1. Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए, एक यूआरएल जनरेट करें:
    auth_uri = auth_client.authorization_uri.to_s
  2. उपयोगकर्ता को auth_uri पर रीडायरेक्ट करें.

Node.js

  1. Google के OAuth 2.0 सर्वर से ऐक्सेस का अनुरोध करने के लिए, चरण 1 से generateAuthUrl वाले यूआरएल authorizationUrl का इस्तेमाल करें.
  2. उपयोगकर्ता को 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 का OAuth 2.0 सर्वर, उपयोगकर्ता की पुष्टि करता है. साथ ही, आपके ऐप्लिकेशन के लिए, उपयोगकर्ता से अनुरोध किए गए दायरे को ऐक्सेस करने की सहमति लेता है. यह रिस्पॉन्स, आपके ऐप्लिकेशन पर वापस भेजा जाता है. इसके लिए, आपके बताए गए रीडायरेक्ट यूआरएल का इस्तेमाल किया जाता है.

तीसरा चरण: Google, उपयोगकर्ता को सहमति देने के लिए कहता है

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

आपके ऐप्लिकेशन को इस चरण में कुछ भी करने की ज़रूरत नहीं है, क्योंकि यह Google के OAuth 2.0 सर्वर से जवाब का इंतज़ार करता है, जो यह बताता है कि ऐक्सेस दिया गया है या नहीं. इस जवाब के बारे में अगले चरण में बताया गया है.

गड़बड़ियां

Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट को किए जाने वाले अनुरोधों में, पुष्टि करने और अनुमति देने के अनुमानित फ़्लो के बजाय, उपयोगकर्ता को दिखने वाले गड़बड़ी के मैसेज दिख सकते हैं. आम तौर पर होने वाली गड़बड़ी के कोड और सुझाए गए रिज़ॉल्यूशन यहां दिए गए हैं.

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 साइन इन या Android के लिए AppSheet.

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

iOS

WKWebView में अनुमति के अनुरोध खोलते समय, iOS और macOS के डेवलपर को यह गड़बड़ी दिख सकती है. इसके बजाय, डेवलपर को iOS लाइब्रेरी का इस्तेमाल करना चाहिए, जैसे कि iOS के लिए Google साइन इन या iOS के लिए AppAuth की सुविधा.

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

org_internal

अनुरोध में मौजूद OAuth क्लाइंट आईडी, ऐसे प्रोजेक्ट का हिस्सा है जो Google Cloud के किसी खास संगठन में, Google खातों को ऐक्सेस नहीं करता. इस कॉन्फ़िगरेशन के विकल्प के बारे में ज़्यादा जानकारी के लिए, OAuth स्क्रीन के लिए सहमति सेट अप करने के लेख में, उपयोगकर्ता टाइप सेक्शन देखें.

invalid_client

OAuth क्लाइंट सीक्रेट गलत है. OAuth क्लाइंट कॉन्फ़िगरेशन की समीक्षा करें. इसमें, इस अनुरोध के लिए इस्तेमाल किया गया क्लाइंट आईडी और सीक्रेट भी शामिल है.

invalid_grant

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

redirect_uri_mismatch

अनुमति के अनुरोध में दिया गया redirect_uri, OAuth क्लाइंट आईडी के लिए रीडायरेक्ट किए गए यूआरआई से मेल नहीं खाता. Google API Console Credentials pageमें रीडायरेक्ट करने वाले ऐसे यूआरआई की समीक्षा करें जिन्हें अनुमति मिली है.

ऐसा हो सकता है कि redirect_uri पैरामीटर, OAuth आउट-ऑफ़-बैंड (OOB) फ़्लो के बारे में बताता हो. हालांकि, अब यह काम नहीं करता. इंटिग्रेशन को अपडेट करने के लिए, डेटा को दूसरी जगह भेजने से जुड़ी गाइड देखें.

चौथा चरण: 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 Drive की फ़ाइलों का मेटाडेटा देखने का रीड ओनली ऐक्सेस होता है:

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 गड़बड़ी मिल सकती है, बशर्ते आपकी स्थानीय मशीन उस पते पर कोई फ़ाइल न दिखाती हो. अगले चरण में, उपयोगकर्ता को आपके ऐप्लिकेशन पर रीडायरेक्ट करते समय, यूआरआई में दी गई जानकारी के बारे में ज़्यादा जानकारी दी जाती है.

पांचवां चरण: टोकन को रीफ़्रेश और ऐक्सेस करने के लिए, Exchange ऑथराइज़ेशन कोड

वेब सर्वर से ऑथराइज़ेशन कोड मिलने के बाद, वह ऐक्सेस टोकन के लिए ऑथराइज़ेशन कोड को बदल सकता है.

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 ऑब्जेक्ट दिखाता है. इस ऑब्जेक्ट में कुछ समय के लिए इस्तेमाल किए जा रहे टोकन और रीफ़्रेश टोकन मौजूद होते हैं. ध्यान दें कि रीफ़्रेश टोकन सिर्फ़ तब दिखता है, जब आपका ऐप्लिकेशन Google के ऑथराइज़ेशन सर्वर के शुरुआती अनुरोध में, access_type पैरामीटर को offline पर सेट करता है.

रिस्पॉन्स में ये फ़ील्ड शामिल हैं:

फ़ील्ड
access_token आपका ऐप्लिकेशन, Google API के अनुरोध को अनुमति देने वाला टोकन भेजता है.
expires_in ऐक्सेस टोकन के बचे हुए समय को सेकंड में.
refresh_token एक टोकन, जिसका इस्तेमाल करके आप एक नया ऐक्सेस टोकन पा सकते हैं. रीफ़्रेश टोकन तब तक मान्य होते हैं, जब तक उपयोगकर्ता ऐक्सेस को निरस्त नहीं करता. यह फ़ील्ड फिर से सिर्फ़ तब काम करता है, जब Google के ऑथराइज़ेशन सर्वर को भेजे जाने वाले शुरुआती अनुरोध में, 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"
}

गड़बड़ियां

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

invalid_grant

दिया गया ऑथराइज़ेशन कोड अमान्य है या फ़ॉर्मैट गलत है. OAuth प्रोसेस को रीस्टार्ट करके नए कोड का अनुरोध करें, ताकि उपयोगकर्ता को फिर से सहमति देने के लिए कहा जा सके.

Google API को कॉल करना

PHP

यह तरीका अपनाकर, Google API को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें:

  1. अगर आपको नए Google\Client ऑब्जेक्ट के लिए ऐक्सेस टोकन लागू करना है — उदाहरण के लिए, अगर आपने ऐक्सेस टोकन को किसी उपयोगकर्ता सेशन में सेव किया है, तो: setAccessToken तरीके का इस्तेमाल करें:
    $client->setAccessToken($access_token);
  2. एपीआई के लिए ऐसा सर्विस ऑब्जेक्ट बनाएं जिसे कॉल करना है. आप जिस एपीआई को कॉल करना चाहते हैं उसके कंस्ट्रक्टर को अनुमति वाला Google\Client ऑब्जेक्ट देकर, सेवा का ऑब्जेक्ट बनाएं. उदाहरण के लिए, Drive API को कॉल करने के लिए:
    $drive = new Google\Service\Drive($client);
  3. सेवा ऑब्जेक्ट से मिले इंटरफ़ेस का इस्तेमाल करके, एपीआई सेवा के लिए अनुरोध करें. उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के Google Drive में फ़ाइलों की सूची बनाने के लिए:
    $files = $drive->files->listFiles(array())->getItems();

Python

ऐक्सेस टोकन मिलने के बाद, आपका ऐप्लिकेशन उस टोकन का इस्तेमाल, किसी उपयोगकर्ता खाते या सेवा खाते की ओर से, एपीआई अनुरोधों को अनुमति देने के लिए कर सकता है. जिस एपीआई को कॉल करना है उसके लिए सेवा ऑब्जेक्ट बनाने के लिए, उपयोगकर्ता की अनुमति वाले क्रेडेंशियल का इस्तेमाल करें. इसके बाद, उस एपीआई का इस्तेमाल करके आधिकारिक एपीआई अनुरोध करें.

  1. एपीआई के लिए ऐसा सर्विस ऑब्जेक्ट बनाएं जिसे कॉल करना है. एपीआई लाइब्रेरी और उपयोगकर्ता क्रेडेंशियल के नाम और वर्शन के साथ googleapiclient.discovery लाइब्रेरी के build तरीके को कॉल करके, सेवा ऑब्जेक्ट बनाया जाता है: उदाहरण के लिए, Drive API के वर्शन 2 को कॉल करने के लिए:
    from googleapiclient.discovery import build
    
    drive = build('drive', 'v2', credentials=credentials)
  2. सेवा ऑब्जेक्ट से मिले इंटरफ़ेस का इस्तेमाल करके, एपीआई सेवा के लिए अनुरोध करें. उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के Google Drive में फ़ाइलों की सूची बनाने के लिए:
    files = drive.files().list().execute()

Ruby

auth_client ऑब्जेक्ट का इस्तेमाल करके, यह तरीका अपनाकर Google API को कॉल करें:

  1. एपीआई के लिए ऐसा सर्विस ऑब्जेक्ट बनाएं जिसे कॉल करना है. उदाहरण के लिए, Drive API के वर्शन 2 को कॉल करने के लिए:
    drive = Google::Apis::DriveV2::DriveService.new
  2. सेवा पर क्रेडेंशियल सेट करें:
    drive.authorization = auth_client
  3. एपीआई सेवा के लिए अनुरोध करने के लिए, सेवा ऑब्जेक्ट से मिले इंटरफ़ेस का इस्तेमाल करें. उदाहरण के लिए, पुष्टि किए गए उपयोगकर्ता के 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 API को कॉल करने के लिए किया जा सकता है. हालांकि, यह ज़रूरी है कि एपीआई को ज़रूरी ऐक्सेस(स्कोप) दिए गए हों. ऐसा करने के लिए, एपीआई के अनुरोध में ऐक्सेस टोकन को शामिल करें. इसके लिए, access_token क्वेरी पैरामीटर या Authorization एचटीटीपी हेडर Bearer की वैल्यू शामिल करें. संभव होने पर, एचटीटीपी हेडर को प्राथमिकता दी जाती है, क्योंकि सर्वर लॉग में क्वेरी स्ट्रिंग दिखती हैं. ज़्यादातर मामलों में, Google API पर कॉल सेट अप करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है. उदाहरण के लिए, Drive Files API पर कॉल करते समय.

OAuth 2.0 Playground में, सभी Google API को आज़माया जा सकता है और उनके दायरे देखे जा सकते हैं.

एचटीटीपी जीईटी के उदाहरण

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

इस उदाहरण को चलाने के लिए:

  1. API Consoleमें, रीडायरेक्ट करने वाले यूआरएल की सूची में स्थानीय मशीन का यूआरएल जोड़ें. उदाहरण के लिए, http://localhost:8080 जोड़ें.
  2. एक नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. उदाहरण के लिए:
    mkdir ~/php-oauth2-example
    cd ~/php-oauth2-example
  3. कंपोज़र का इस्तेमाल करके, PHP के लिए Google API क्लाइंट लाइब्रेरी इंस्टॉल करें:
    composer require google/apiclient:^2.10
  4. नीचे दिए गए कॉन्टेंट के साथ index.php और oauth2callback.php फ़ाइलें बनाएं.
  5. उदाहरण के तौर पर, ऐसे वेब सर्वर का इस्तेमाल करें जिसे PHP के लिए बनाया गया हो. अगर आप PHP 5.6 या इसके बाद के वर्शन का इस्तेमाल करते हैं, तो आप 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

इस उदाहरण में Flask फ़्रेमवर्क का इस्तेमाल किया गया है. यह 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

इस उदाहरण को चलाने के लिए:

  1. API Consoleमें, रीडायरेक्ट करने वाले यूआरएल की सूची में स्थानीय मशीन का यूआरएल जोड़ें. उदाहरण के लिए, http://localhost जोड़ें.
  2. पक्का करें कि आपके पास रखरखाव का एलटीएस, चालू एलटीएस या Node.js का मौजूदा वर्शन इंस्टॉल है.
  3. एक नई डायरेक्ट्री बनाएं और उसमें बदलाव करें. उदाहरण के लिए:
    mkdir ~/nodejs-oauth2-example
    cd ~/nodejs-oauth2-example
  4. Install the Google API Client Library for Node.js using npm:
    npm install googleapis
  5. नीचे दिए गए कॉन्टेंट की मदद से main.js फ़ाइलें बनाएं.
  6. उदाहरण चलाएं:
    node .\main.js

मुख्य.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 का तीसरा सेक्शन देखें. इसकी जानकारी नीचे दी गई है.

सत्यापन नियम
स्कीम

रीडायरेक्ट यूआरआई के लिए, एचटीटीपीएस स्कीम का इस्तेमाल किया जाना चाहिए, न कि सादे एचटीटीपी का. Localhost यूआरआई (इसमें Localhost आईपी पते का यूआरएल भी शामिल है) पर यह नियम लागू नहीं होता.

होस्ट

होस्ट, रॉ आईपी पते नहीं हो सकते. Localhost आईपी पतों को इस नियम से छूट दी गई है.

डोमेन
  • होस्ट टीएलडी (टॉप लेवल डोमेन) सार्वजनिक सफ़िक्स सूची से जुड़े होने चाहिए.
  • होस्ट डोमेन “googleusercontent.com” नहीं हो सकते.
  • रीडायरेक्ट यूआरआई में यूआरएल संक्षेपक डोमेन (उदाहरण, goo.gl) शामिल नहीं हो सकते, बशर्ते ऐप्लिकेशन डोमेन का मालिक न हो. इसके अलावा, अगर किसी छोटे डोमेन का मालिकाना हक रखने वाला ऐप्लिकेशन, उस डोमेन पर रीडायरेक्ट करने का विकल्प चुनता है, तो उस यूआरआई के पाथ में “/google-callback/” शामिल होना चाहिए या “/google-callback” से खत्म होना चाहिए.
  • उपयोगकर्ता की जानकारी

    रीडायरेक्ट यूआरआई में userinfo सबकॉम्पोनेंट शामिल नहीं हो सकता.

    पाथ

    रीडायरेक्ट यूआरआई में पाथ ट्रेवर्सल (जिसे डायरेक्ट्री बैकट्रैकिंग भी कहा जाता है) शामिल नहीं हो सकते. इन यूआरएल को “/..” या “\..” या उनके यूआरएल एन्कोडिंग से दिखाया जाता है.

    क्वेरी

    रीडायरेक्ट यूआरआई में खुले रीडायरेक्ट शामिल नहीं हो सकते.

    फ़्रैगमेंट

    रीडायरेक्ट यूआरआई में फ़्रैगमेंट घटक शामिल नहीं हो सकता.

    वर्ण रीडायरेक्ट यूआरआई में कुछ खास वर्ण शामिल नहीं हो सकते. जैसे:
    • वाइल्डकार्ड वर्ण ('*')
    • प्रिंट न हो सकने वाले ASCII वर्ण
    • अमान्य प्रतिशत एन्कोडिंग (प्रतिशत में प्रवेश करने के बाद किसी भी प्रतिशत एन्कोडिंग के बाद आने वाली कोई भी प्रतिशत एन्कोडिंग, जिसमें दो हेक्साडेसिमल अंक होते हैं)
    • शून्य वर्ण (एन्कोड किए गए नल वर्ण, उदाहरण के लिए, %00, %C0%80)

    इंक्रीमेंटल (बढ़ने वाली) अनुमति

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

    उदाहरण के लिए, ऐसा ऐप्लिकेशन हो सकता है जो लोगों को संगीत ट्रैक का सैंपल बनाने और मिक्स बनाने की अनुमति देता हो. इसके लिए, साइन इन करते समय बहुत कम संसाधनों की ज़रूरत पड़ सकती है. शायद, साइन इन करने वाले व्यक्ति के नाम से ज़्यादा कुछ न हो. हालांकि, मिक्स को सेव करने के लिए उनके Google Drive का ऐक्सेस होना ज़रूरी है. ज़्यादातर लोगों को यह ठीक तब लगता है, जब उनसे ऐप्लिकेशन के लिए ज़रूरी Google Drive का ऐक्सेस मांगा जाता है.

    इस मामले में, साइन इन करते समय ऐप्लिकेशन openid और profile के दायरों के लिए, बुनियादी साइन इन करने का अनुरोध कर सकता है. इसके बाद, पहले अनुरोध के समय, https://www.googleapis.com/auth/drive.file के अनुरोध का इस्तेमाल करके, मिक्स को सेव किया जा सकता है.

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

    किसी इंक्रीमेंटल अनुमति से मिले ऐक्सेस टोकन पर ये नियम लागू होते हैं:

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

    पहले चरण में भाषा के हिसाब से बने कोड के सैंपल: कदम 2: Google के 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 के 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 तरीके को कॉल करते समय, अपने access_type को offline पर सेट करना होगा. अगर आपने रीफ़्रेश टोकन पाने के लिए ज़रूरी कंस्ट्रेंट को सेट किए बिना ही, अपने ऐप्लिकेशन को पहले से ही ज़रूरी अनुमतियां दे दी हैं, तो आपको एक नया रीफ़्रेश टोकन पाने के लिए ऐप्लिकेशन को फिर से अनुमति देनी होगी.

    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 के साथ गड़बड़ी कोड दिखाया जाता है.