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

इस दस्तावेज़ में, JavaScript वेब ऐप्लिकेशन से YouTube Data API ऐक्सेस करने के लिए, OAuth 2.0 की अनुमति लागू करने का तरीका बताया गया है. OAuth 2.0 की मदद से, उपयोगकर्ता किसी ऐप्लिकेशन के साथ चुनिंदा डेटा शेयर कर सकते हैं. हालांकि, इस दौरान उनके उपयोगकर्ता नाम, पासवर्ड, और अन्य जानकारी को निजी रखा जाता है. उदाहरण के लिए, किसी चैनल का YouTube डेटा वापस पाने की अनुमति पाने के लिए, ऐप्लिकेशन OAuth 2.0 का इस्तेमाल कर सकता है.

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

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

Google API क्लाइंट लाइब्रेरी और Google Identity सेवाएं

अगर Google को अनुमति वाले कॉल करने के लिए, JavaScript के लिए Google API की क्लाइंट लाइब्रेरी का इस्तेमाल किया जाता है, तो आपको OAuth 2.0 फ़्लो को मैनेज करने के लिए, Google Identity Services की JavaScript लाइब्रेरी का इस्तेमाल करना चाहिए. कृपया Google Identity Services का टोकन मॉडल देखें. यह OAuth 2.0 इंप्लिसिट ग्रांट फ़्लो पर आधारित है.

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

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

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

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

  1. Google API Consoleमें Open the API Library .
  2. If prompted, select a project, or create a new one.
  3. YouTube Data API को ढूंढने और चालू करने के लिए, लाइब्रेरी पेज का इस्तेमाल करें. ऐसे कोई दूसरे एपीआई ढूंढें जिनका इस्तेमाल आपका ऐप्लिकेशन करेगा और उन्हें भी चालू करें.

अनुमति देने वाले क्रेडेंशियल बनाएं

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

  1. Go to the Credentials page.
  2. क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी पर क्लिक करें.
  3. वेब ऐप्लिकेशन ऐप्लिकेशन का प्रकार चुनें.
  4. फ़ॉर्म भरें. अनुमति वाले Google API अनुरोध करने के लिए JavaScript का इस्तेमाल करने वाले ऐप्लिकेशन को अनुमति वाले JavaScript ऑरिजिन की जानकारी देनी होगी. ऑरिजिन उन डोमेन की पहचान करते हैं जिनसे आपका ऐप्लिकेशन, OAuth 2.0 सर्वर को अनुरोध भेज सकता है. इन ऑरिजिन को पुष्टि करने के लिए Google के नियमों का पालन करना होगा.

ऐक्सेस के दायरों की पहचान करना

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

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

YouTube Data API v3 इन दायरों का इस्तेमाल करता है:

बंदूक पर लगने वाली दूरबीन
https://www.googleapis.com/auth/youtubeअपना YouTube खाता मैनेज करें
https://www.googleapis.com/auth/youtube.channel-memberships.creatorअपने चैनल के मौजूदा सक्रिय सदस्यों की सूची और उनका मौजूदा लेवल देखें. यह भी देखें कि वे चैनल के सदस्य कब बने
https://www.googleapis.com/auth/youtube.force-sslअपने YouTube वीडियो की रेटिंग, टिप्पणियां और कैप्शन देखें, उनमें बदलाव करें और उन्हें हमेशा के लिए मिटाएं
https://www.googleapis.com/auth/youtube.readonlyअपना YouTube खाता देखें
https://www.googleapis.com/auth/youtube.uploadअपने YouTube वीडियो मैनेज करें
https://www.googleapis.com/auth/youtubepartnerYouTube पर अपनी परिसंपत्ति तथा संबंधित सामग्री देखें व प्रबंधित करें
https://www.googleapis.com/auth/youtubepartner-channel-auditकिसी YouTube भागीदार की ऑडिट प्रक्रिया के दौरान उससे प्रासंगिक अपने YouTube चैनल की निजी जानकारी देखें

OAuth 2.0 एपीआई के दायरे दस्तावेज़ में, उन दायरों की पूरी सूची है जिनका इस्तेमाल Google API को ऐक्सेस करने के लिए किया जा सकता है.

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

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

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

उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति का अनुरोध करने के लिए, उपयोगकर्ता को Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करें.

OAuth 2.0 एंडपॉइंट

https://accounts.google.com/o/oauth2/v2/auth पर Google के OAuth 2.0 एंडपॉइंट से ऐक्सेस का अनुरोध करने के लिए, यूआरएल जनरेट करें. इस एंडपॉइंट को एचटीटीपीएस पर ऐक्सेस किया जा सकता है; सादे एचटीटीपी कनेक्शन अस्वीकार कर दिए जाते हैं.

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 ज़रूरी

JavaScript ऐप्लिकेशन को पैरामीटर का मान token पर सेट करना होगा. यह वैल्यू Google के ऑथराइज़ेशन सर्वर को यह निर्देश देती है कि वह ऐक्सेस टोकन को name=value पेयर के तौर पर, यूआरआई (#) के फ़्रैगमेंट आइडेंटिफ़ायर में वापस करे, जिस पर अनुमति देने की प्रोसेस पूरी होने के बाद उपयोगकर्ता को रीडायरेक्ट किया जाता है.

scope ज़रूरी

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

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

YouTube Data API v3 इन दायरों का इस्तेमाल करता है:

बंदूक पर लगने वाली दूरबीन
https://www.googleapis.com/auth/youtubeअपना YouTube खाता मैनेज करें
https://www.googleapis.com/auth/youtube.channel-memberships.creatorअपने चैनल के मौजूदा सक्रिय सदस्यों की सूची और उनका मौजूदा लेवल देखें. यह भी देखें कि वे चैनल के सदस्य कब बने
https://www.googleapis.com/auth/youtube.force-sslअपने YouTube वीडियो की रेटिंग, टिप्पणियां और कैप्शन देखें, उनमें बदलाव करें और उन्हें हमेशा के लिए मिटाएं
https://www.googleapis.com/auth/youtube.readonlyअपना YouTube खाता देखें
https://www.googleapis.com/auth/youtube.uploadअपने YouTube वीडियो मैनेज करें
https://www.googleapis.com/auth/youtubepartnerYouTube पर अपनी परिसंपत्ति तथा संबंधित सामग्री देखें व प्रबंधित करें
https://www.googleapis.com/auth/youtubepartner-channel-auditकिसी YouTube भागीदार की ऑडिट प्रक्रिया के दौरान उससे प्रासंगिक अपने YouTube चैनल की निजी जानकारी देखें

OAuth 2.0 एपीआई के दायरे दस्तावेज़ में, उन दायरों की पूरी सूची मिलती है जिनका इस्तेमाल Google API को ऐक्सेस करने के लिए किया जा सकता है.

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

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 के ऑथराइज़ेशन सर्वर पर रीडायरेक्ट करने की सुविधा

नीचे एक उदाहरण यूआरएल दिखाया गया है, जिसमें लाइन ब्रेक और पढ़ने लायक स्पेस हैं. यूआरएल, एक ऐसे स्कोप के ऐक्सेस का अनुरोध करता है जो उपयोगकर्ता का YouTube डेटा पाने की अनुमति देता है. यह इंक्रीमेंटल ऑथराइज़ेशन (include_granted_scopes=true) का इस्तेमाल करता है, ताकि यह पक्का किया जा सके कि नए ऐक्सेस टोकन में वे सभी दायरे शामिल हों जिन्हें उपयोगकर्ता ने पहले ऐप्लिकेशन का ऐक्सेस दिया था. उदाहरण में कई अन्य पैरामीटर भी सेट किए गए हैं.

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 client_id=client_id

अनुरोध यूआरएल बनाने के बाद, उपयोगकर्ता को उस पर रीडायरेक्ट करें.

JavaScript सैंपल कोड

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

/*
 * Create form to request access token from Google's OAuth 2.0 server.
 */
function oauthSignIn() {
  // Google's OAuth 2.0 endpoint for requesting an access token
  var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

  // Create <form> element to submit parameters to OAuth 2.0 endpoint.
  var form = document.createElement('form');
  form.setAttribute('method', 'GET'); // Send as a GET request.
  form.setAttribute('action', oauth2Endpoint);

  // Parameters to pass to OAuth 2.0 endpoint.
  var params = {'client_id': 'YOUR_CLIENT_ID',
                'redirect_uri': 'YOUR_REDIRECT_URI',
                'response_type': 'token',
                'scope': 'https://www.googleapis.com/auth/youtube.force-ssl',
                'include_granted_scopes': 'true',
                'state': 'pass-through value'};

  // Add form parameters as hidden input values.
  for (var p in params) {
    var input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', p);
    input.setAttribute('value', params[p]);
    form.appendChild(input);
  }

  // Add form to page and submit it to open the OAuth 2.0 endpoint.
  document.body.appendChild(form);
  form.submit();
}

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

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

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

गड़बड़ियां

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

admin_policy_enforced

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

disallowed_useragent

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

Android

android.webkit.WebView में अनुमति देने के अनुरोध खोलते समय, Android डेवलपर को गड़बड़ी का यह मैसेज दिख सकता है. इसके बजाय, डेवलपर को Android लाइब्रेरी का इस्तेमाल करना चाहिए. जैसे, Android के लिए Google साइन-इन या OpenID Foundation का Android के लिए AppAuth.

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

iOS

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

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

org_internal

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

invalid_client

जिस ऑरिजिन से अनुरोध किया गया है उसकी अनुमति इस क्लाइंट के पास नहीं है. origin_mismatch देखें.

invalid_grant

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

origin_mismatch

अनुमति देने का अनुरोध करने वाली JavaScript की स्कीम, डोमेन, और/या पोर्ट, OAuth क्लाइंट आईडी के लिए रजिस्टर किए गए अनुमति वाले JavaScript ऑरिजिन यूआरआई से शायद मेल न खाए. Google API Console Credentials pageमें, अनुमति वाले JavaScript ऑरिजिन की समीक्षा करें.

redirect_uri_mismatch

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

अनुमति देने का अनुरोध करने वाली JavaScript की स्कीम, डोमेन, और/या पोर्ट, OAuth क्लाइंट आईडी के लिए रजिस्टर किए गए अनुमति वाले JavaScript ऑरिजिन यूआरआई से शायद मेल न खाए. Google API Console Credentials pageमें अनुमति वाले JavaScript ऑरिजिन की समीक्षा करें.

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

invalid_request

आपके किए गए अनुरोध में कोई गड़बड़ी थी. ऐसा कई वजहों से हो सकता है:

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

तीसरा चरण: OAuth 2.0 सर्वर रिस्पॉन्स मैनेज करना

OAuth 2.0 एंडपॉइंट

OAuth 2.0 सर्वर, आपके ऐक्सेस टोकन के लिए किए गए अनुरोध में बताए गए redirect_uri पर रिस्पॉन्स भेजता है.

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

  • ऐक्सेस टोकन रिस्पॉन्स:

    https://oauth2.example.com/callback#access_token=4/P7q7W91&token_type=Bearer&expires_in=3600

    access_token पैरामीटर के अलावा, फ़्रैगमेंट स्ट्रिंग में token_type पैरामीटर भी होता है, जो हमेशा Bearer पर सेट होता है. साथ ही, expires_in पैरामीटर भी शामिल होता है, जो टोकन के लाइफ़टाइम की जानकारी सेकंड में देता है. अगर ऐक्सेस टोकन के अनुरोध में state पैरामीटर के बारे में बताया गया था, तो उसकी वैल्यू भी रिस्पॉन्स में शामिल होती है.

  • गड़बड़ी का जवाब:
    https://oauth2.example.com/callback#error=access_denied

OAuth 2.0 सर्वर के रिस्पॉन्स का सैंपल

नीचे दिए गए सैंपल यूआरएल पर क्लिक करके, इस फ़्लो की जांच की जा सकती है. यह आपके Google Drive में मौजूद फ़ाइलों का मेटाडेटा देखने के लिए, रीड ओनली ऐक्सेस का अनुरोध करता है:

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 client_id=client_id

OAuth 2.0 फ़्लो पूरा करने के बाद, आपको http://localhost/oauth2callback पर रीडायरेक्ट कर दिया जाएगा. अगर आपका कंप्यूटर इस पते पर फ़ाइल सेव नहीं करता, तो यह यूआरएल 404 NOT FOUND गड़बड़ी दिखाएगा. अगला चरण यूआरआई में दिखाई गई जानकारी के बारे में ज़्यादा जानकारी देता है, जब उपयोगकर्ता को आपके ऐप्लिकेशन पर वापस रीडायरेक्ट किया जाता है.

Calling Google API

OAuth 2.0 एंडपॉइंट

आपके ऐप्लिकेशन को ऐक्सेस टोकन मिल जाने के बाद, किसी उपयोगकर्ता खाते की ओर से Google API को कॉल करने के लिए, टोकन का इस्तेमाल किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि एपीआई के लिए ज़रूरी ऐक्सेस के दायरे दिए गए हों. ऐसा करने के लिए, एपीआई को किए गए अनुरोध में ऐक्सेस टोकन शामिल करें. इसके लिए, access_token क्वेरी पैरामीटर या Authorization एचटीटीपी हेडर Bearer वैल्यू शामिल करें. जब मुमकिन हो, तब एचटीटीपी हेडर को प्राथमिकता दी जानी चाहिए, क्योंकि सर्वर लॉग में क्वेरी स्ट्रिंग अक्सर दिखती हैं. ज़्यादातर मामलों में, Google API पर अपने कॉल सेट अप करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है. उदाहरण के लिए, YouTube Live Streaming API को कॉल करते समय.

ध्यान दें कि YouTube Live Streaming API, सेवा खाते के फ़्लो के साथ काम नहीं करता. सेवा खाते को YouTube खाते से लिंक करने का कोई तरीका नहीं है. इसलिए, इस फ़्लो का इस्तेमाल करके अनुरोधों को अनुमति देने की कोशिश करने पर, NoLinkedYouTubeAccount गड़बड़ी जनरेट होगी.

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

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

Authorization: Bearer एचटीटीपी हेडर का इस्तेमाल करके, liveBroadcasts.list एंडपॉइंट (YouTube Live Streaming API) को कॉल करने पर ऐसा दिख सकता है. ध्यान दें कि आपको अपना ऐक्सेस टोकन बताना होगा:

GET /youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

यहां access_token क्वेरी स्ट्रिंग पैरामीटर का इस्तेमाल करके, पुष्टि किए गए उपयोगकर्ता के लिए उसी एपीआई को कॉल किया गया है:

GET https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

curl के उदाहरण

curl कमांड-लाइन ऐप्लिकेशन का इस्तेमाल करके, इन कमांड की जांच की जा सकती है. यहां एक उदाहरण दिया गया है, जिसमें एचटीटीपी हेडर विकल्प का इस्तेमाल किया जाता है (इसका सुझाव दिया जाता है):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true

इसके अलावा, क्वेरी स्ट्रिंग पैरामीटर विकल्प:

curl https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

JavaScript सैंपल कोड

नीचे दिए गए कोड स्निपेट में, Google API को अनुरोध भेजने के लिए सीओआरएस (क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग) का इस्तेमाल करने का तरीका बताया गया है. इस उदाहरण में, JavaScript के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल नहीं किया गया है. हालांकि, क्लाइंट लाइब्रेरी का इस्तेमाल न करने पर भी, उस लाइब्रेरी के दस्तावेज़ में मौजूद सीओआरएस सहायता गाइड, इन अनुरोधों को बेहतर तरीके से समझने में आपकी मदद कर सकती है.

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

var xhr = new XMLHttpRequest();
xhr.open('GET',
    'https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet&mine=true' +
    'access_token=' + params['access_token']);
xhr.onreadystatechange = function (e) {
  console.log(xhr.response);
};
xhr.send(null);

पूरा उदाहरण

OAuth 2.0 एंडपॉइंट

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

OAuth 2.0 फ़्लो के लिए, पेज पर यह तरीका अपनाएं:

  1. यह उपयोगकर्ता को Google के OAuth 2.0 सर्वर पर ले जाता है, जो https://www.googleapis.com/auth/youtube.force-ssl स्कोप के ऐक्सेस का अनुरोध करता है.
  2. अनुरोध किए गए एक या उससे ज़्यादा दायरों का ऐक्सेस देने या अस्वीकार करने के बाद, उपयोगकर्ता को ओरिजनल पेज पर रीडायरेक्ट किया जाता है. यह पेज, फ़्रैगमेंट आइडेंटिफ़ायर स्ट्रिंग से ऐक्सेस टोकन को पार्स करता है.
  3. यह पेज, एपीआई अनुरोध का सैंपल देने के लिए, ऐक्सेस टोकन का इस्तेमाल करता है.

    यह एपीआई अनुरोध, YouTube Data API के liveBroadcasts.list तरीके का इस्तेमाल करके, उस उपयोगकर्ता के YouTube चैनल के लिए वीडियो ब्रॉडकास्ट की सूची हासिल करता है जिसे अनुमति मिली है.

  4. अगर अनुरोध सही तरीके से लागू होता है, तो ब्राउज़र के डीबगिंग कंसोल में एपीआई का रिस्पॉन्स लॉग किया जाता है.

अपने Google खाते के लिए अनुमतियां पेज पर जाकर, ऐप्लिकेशन का ऐक्सेस वापस लिया जा सकता है. ऐप्लिकेशन को Google API दस्तावेज़ के लिए OAuth 2.0 डेमो के तौर पर सूची में दिखाया जाएगा.

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

<html><head></head><body>
<script>
  var YOUR_CLIENT_ID = 'REPLACE_THIS_VALUE';
  var YOUR_REDIRECT_URI = 'REPLACE_THIS_VALUE';

  // Parse query string to see if page request is coming from OAuth 2.0 server.
  var fragmentString = location.hash.substring(1);
  var params = {};
  var regex = /([^&=]+)=([^&]*)/g, m;
  while (m = regex.exec(fragmentString)) {
    params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }
  if (Object.keys(params).length > 0 && params['state']) {
    if (params['state'] == localStorage.getItem('state')) {
      localStorage.setItem('oauth2-test-params', JSON.stringify(params) );

      trySampleRequest();
    } else {
      console.log('State mismatch. Possible CSRF attack');
    }
  }

  // Function to generate a random state value
  function generateCryptoRandomState() {
    const randomValues = new Uint32Array(2);
    window.crypto.getRandomValues(randomValues);

    // Encode as UTF-8
    const utf8Encoder = new TextEncoder();
    const utf8Array = utf8Encoder.encode(
      String.fromCharCode.apply(null, randomValues)
    );

    // Base64 encode the UTF-8 data
    return btoa(String.fromCharCode.apply(null, utf8Array))
      .replace(/\+/g, '-')
      .replace(/\//g, '_')
      .replace(/=+$/, '');
  }

  // If there's an access token, try an API request.
  // Otherwise, start OAuth 2.0 flow.
  function trySampleRequest() {
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    if (params && params['access_token']) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET',
          'https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet&mine=true' +
          'access_token=' + params['access_token']);
      xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
          console.log(xhr.response);
        } else if (xhr.readyState === 4 && xhr.status === 401) {
          // Token invalid, so prompt for user permission.
          oauth2SignIn();
        }
      };
      xhr.send(null);
    } else {
      oauth2SignIn();
    }
  }

  /*
   * Create form to request access token from Google's OAuth 2.0 server.
   */
  function oauth2SignIn() {
    // create random state value and store in local storage
    var state = generateCryptoRandomState();
    localStorage.setItem('state', state);

    // Google's OAuth 2.0 endpoint for requesting an access token
    var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

    // Create element to open OAuth 2.0 endpoint in new window.
    var form = document.createElement('form');
    form.setAttribute('method', 'GET'); // Send as a GET request.
    form.setAttribute('action', oauth2Endpoint);

    // Parameters to pass to OAuth 2.0 endpoint.
    var params = {'client_id': YOUR_CLIENT_ID,
                  'redirect_uri': YOUR_REDIRECT_URI,
                  'scope': 'https://www.googleapis.com/auth/youtube.force-ssl',
                  'state': state,
                  'include_granted_scopes': 'true',
                  'response_type': 'token'};

    // Add form parameters as hidden input values.
    for (var p in params) {
      var input = document.createElement('input');
      input.setAttribute('type', 'hidden');
      input.setAttribute('name', p);
      input.setAttribute('value', params[p]);
      form.appendChild(input);
    }

    // Add form to page and submit it to open the OAuth 2.0 endpoint.
    document.body.appendChild(form);
    form.submit();
  }
</script>

<button onclick="trySampleRequest();">Try sample request</button>
</body></html>

JavaScript के ऑरिजिन की पुष्टि करने के नियम

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

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

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

होस्ट

होस्ट, अमान्य आईपी पते नहीं हो सकते. लोकल होस्ट के आईपी पतों पर यह नियम लागू नहीं होता.

डोमेन
  • होस्ट टीएलडी (टॉप लेवल डोमेन) सार्वजनिक सफ़िक्स सूची से जुड़ा होना चाहिए.
  • होस्ट डोमेन “googleusercontent.com” नहीं हो सकते.
  • JavaScript के ऑरिजिन में, यूआरएल को छोटा करने वाले डोमेन (जैसे, goo.gl) तब तक नहीं हो सकते, जब तक ऐप्लिकेशन के पास डोमेन का मालिकाना हक न हो.
  • उपयोगकर्ता की जानकारी

    JavaScript के ऑरिजिन में, userinfo सबकॉम्पोनेंट शामिल नहीं हो सकता.

    पाथ

    JavaScript के ऑरिजिन में, पाथ कॉम्पोनेंट शामिल नहीं किया जा सकता.

    क्वेरी

    JavaScript के ऑरिजिन में क्वेरी कॉम्पोनेंट शामिल नहीं हो सकता.

    फ़्रैगमेंट

    JavaScript के ऑरिजिन में फ़्रैगमेंट कॉम्पोनेंट शामिल नहीं किया जा सकता.

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

    इंक्रीमेंटल अनुमति

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

    उदाहरण के लिए, मान लें कि कोई ऐप्लिकेशन, पुष्टि किए गए उपयोगकर्ता के YouTube चैनल का डेटा इकट्ठा करता है. साथ ही, उपयोगकर्ता को एक खास तरीके से, YouTube Analytics का डेटा पाने की सुविधा भी देता है. इस मामले में, साइन इन के समय ऐप्लिकेशन सिर्फ़ https://www.googleapis.com/auth/youtube.force-ssl स्कोप के ऐक्सेस का अनुरोध कर सकता है. हालांकि, अगर उपयोगकर्ता अपने चैनल के लिए Analytics का डेटा ऐक्सेस करने की कोशिश करता है, तो ऐप्लिकेशन https://www.googleapis.com/auth/yt-analytics.readonly स्कोप के ऐक्सेस का अनुरोध भी कर सकता है.

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

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

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

    OAuth 2.0 एंडपॉइंट

    इस उदाहरण में, कॉल करने वाला ऐप्लिकेशन, उपयोगकर्ता का YouTube डेटा वापस पाने के लिए ऐक्सेस का अनुरोध करता है. इसके अलावा, उपयोगकर्ता ने ऐप्लिकेशन को पहले से दिए गए अन्य ऐक्सेस का भी अनुरोध किया है.

    किसी मौजूदा ऐक्सेस टोकन में स्कोप जोड़ने के लिए, Google के OAuth 2.0 सर्वर से किए गए अनुरोध में include_granted_scopes पैरामीटर शामिल करें.

    नीचे दिया गया कोड स्निपेट इसे करने का तरीका बताता है. स्निपेट यह मानकर चलता है कि आपने ब्राउज़र के लोकल स्टोरेज में उन स्कोप को सेव कर लिया है जिनके लिए आपका ऐक्सेस टोकन मान्य है. (सभी उदाहरण में दिए गए कोड में, उन दायरों की सूची सेव की गई है जिनके लिए ऐक्सेस टोकन मान्य है. इसके लिए, ब्राउज़र की लोकल स्टोरेज में oauth2-test-params.scope प्रॉपर्टी को सेट किया गया है.)

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

    var SCOPE = 'https://www.googleapis.com/auth/youtube.force-ssl';
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    
    var current_scope_granted = false;
    if (params.hasOwnProperty('scope')) {
      var scopes = params['scope'].split(' ');
      for (var s = 0; s < scopes.length; s++) {
        if (SCOPE == scopes[s]) {
          current_scope_granted = true;
        }
      }
    }
    
    if (!current_scope_granted) {
      oauth2SignIn(); // This function is defined elsewhere in this document.
    } else {
      // Since you already have access, you can proceed with the API request.
    }

    टोकन निरस्त करना

    कुछ मामलों में, हो सकता है कि उपयोगकर्ता किसी ऐप्लिकेशन को दिया गया ऐक्सेस वापस लेना चाहें. उपयोगकर्ता, खाता सेटिंग में जाकर ऐक्सेस रद्द कर सकता है. ज़्यादा जानकारी के लिए, तीसरे पक्ष की उन साइटों और ऐप्लिकेशन के पास मौजूद, साइट या ऐप्लिकेशन के ऐक्सेस को हटाएं सेक्शन हटाएं जिनके पास आपके खाते का ऐक्सेस है सहायता दस्तावेज़ देखें.

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

    OAuth 2.0 एंडपॉइंट

    किसी टोकन को प्रोग्राम के हिसाब से रद्द करने के लिए, आपका ऐप्लिकेशन 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 दिखाया जाता है.

    नीचे दिया गया JavaScript स्निपेट यह दिखाता है कि JavaScript के लिए Google API क्लाइंट लाइब्रेरी का इस्तेमाल किए बिना, JavaScript में टोकन को कैसे रद्द किया जाता है. रद्द किए गए टोकन के लिए, Google का OAuth 2.0 एंडपॉइंट, क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस) के साथ काम नहीं करता है. इसलिए, कोड एक फ़ॉर्म बनाता है और अनुरोध पोस्ट करने के लिए, XMLHttpRequest() तरीके का इस्तेमाल करने के बजाय, एंडपॉइंट पर फ़ॉर्म सबमिट करता है.

    function revokeAccess(accessToken) {
      // Google's OAuth 2.0 endpoint for revoking access tokens.
      var revokeTokenEndpoint = 'https://oauth2.googleapis.com/revoke';
    
      // Create <form> element to use to POST data to the OAuth 2.0 endpoint.
      var form = document.createElement('form');
      form.setAttribute('method', 'post');
      form.setAttribute('action', revokeTokenEndpoint);
    
      // Add access token to the form so it is set as value of 'token' parameter.
      // This corresponds to the sample curl request, where the URL is:
      //      https://oauth2.googleapis.com/revoke?token={token}
      var tokenField = document.createElement('input');
      tokenField.setAttribute('type', 'hidden');
      tokenField.setAttribute('name', 'token');
      tokenField.setAttribute('value', accessToken);
      form.appendChild(tokenField);
    
      // Add form to page and submit it to actually revoke the token.
      document.body.appendChild(form);
      form.submit();
    }