इस दस्तावेज़ में, OAuth 2.0 ऑथराइज़ेशन को लागू करने का तरीका बताया गया है. इससे टीवी, गेम कंसोल, और प्रिंटर जैसे डिवाइसों पर चलने वाले ऐप्लिकेशन के ज़रिए YouTube Data API को ऐक्सेस किया जा सकता है. खास तौर पर, इस फ़्लो को उन डिवाइसों के लिए डिज़ाइन किया गया है जिनके पास ब्राउज़र का ऐक्सेस नहीं है या जिनमें इनपुट देने की सीमित सुविधाएं हैं.
OAuth 2.0 की मदद से उपयोगकर्ता, किसी ऐप्लिकेशन के साथ कुछ खास डेटा शेयर कर सकते हैं. हालांकि, इस दौरान उनके उपयोगकर्ता नाम, पासवर्ड, और अन्य जानकारी निजी रहती है. उदाहरण के लिए, कोई टीवी ऐप्लिकेशन, Google Drive में सेव की गई किसी फ़ाइल को चुनने की अनुमति पाने के लिए OAuth 2.0 का इस्तेमाल कर सकता है.
इस फ़्लो का इस्तेमाल करने वाले ऐप्लिकेशन, अलग-अलग डिवाइसों पर डिस्ट्रिब्यूट किए जाते हैं. इसलिए, यह माना जाता है कि ऐप्लिकेशन, सीक्रेट नहीं रख सकते. उपयोगकर्ता के ऐप्लिकेशन पर मौजूद होने या ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान, ये Google API को ऐक्सेस कर सकते हैं.
अन्य विकल्प
अगर आपको Android, iOS, macOS, Linux या Windows (इसमें Universal Windows Platform भी शामिल है) जैसे किसी प्लैटफ़ॉर्म के लिए कोई ऐप्लिकेशन बनाना है, तो मोबाइल और डेस्कटॉप ऐप्लिकेशन के लिए OAuth 2.0 फ़्लो का इस्तेमाल करें. इस प्लैटफ़ॉर्म पर, ब्राउज़र और इनपुट की सभी सुविधाओं को ऐक्सेस किया जा सकता है. (अगर आपका ऐप्लिकेशन ग्राफ़िकल इंटरफ़ेस के बिना कमांड-लाइन टूल है, तब भी आपको इस फ़्लो का इस्तेमाल करना चाहिए.)
अगर आपको उपयोगकर्ताओं को सिर्फ़ उनके Google खातों से साइन इन करने की अनुमति देनी है और उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी पाने के लिए, JWT आईडी टोकन का इस्तेमाल करना है, तो टीवी और सीमित इनपुट वाले डिवाइसों पर साइन-इन करें लेख पढ़ें.
ज़रूरी शर्तें
अपने प्रोजेक्ट के लिए एपीआई चालू करना
Google API को कॉल करने वाले किसी भी ऐप्लिकेशन को, API Consoleमें उन एपीआई को चालू करना होगा.
अपने प्रोजेक्ट के लिए कोई एपीआई चालू करने के लिए:
- Open the API Library में Google API Console.
- If prompted, select a project, or create a new one.
- YouTube Data API को ढूंढने और चालू करने के लिए, लाइब्रेरी पेज का इस्तेमाल करें. उन अन्य एपीआई का पता लगाएं जिनका इस्तेमाल आपका ऐप्लिकेशन करेगा. साथ ही, उन्हें भी चालू करें.
अनुमति देने वाले क्रेडेंशियल बनाना
Google APIs को ऐक्सेस करने के लिए OAuth 2.0 का इस्तेमाल करने वाले किसी भी ऐप्लिकेशन के पास अनुमति देने वाले क्रेडेंशियल होने चाहिए. इनसे Google के OAuth 2.0 सर्वर पर ऐप्लिकेशन की पहचान होती है. यहां दिए गए तरीके से, अपने प्रोजेक्ट के लिए क्रेडेंशियल बनाए जा सकते हैं. इसके बाद, आपके ऐप्लिकेशन इन क्रेडेंशियल का इस्तेमाल करके, उन एपीआई को ऐक्सेस कर सकते हैं जिन्हें आपने उस प्रोजेक्ट के लिए चालू किया है.
- Go to the Credentials page.
- क्लाइंट बनाएं पर क्लिक करें.
- टीवी और सीमित इनपुट डिवाइस ऐप्लिकेशन का टाइप चुनें.
- अपने OAuth 2.0 क्लाइंट को कोई नाम दें और बनाएं पर क्लिक करें.
ऐक्सेस स्कोप की पहचान करना
स्कोप की मदद से, आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों को ऐक्सेस करने का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इसलिए, अनुरोध किए गए स्कोप की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच उलटा संबंध हो सकता है.
OAuth 2.0 ऑथराइज़ेशन लागू करने से पहले, हमारा सुझाव है कि आप उन स्कोप की पहचान करें जिनके लिए आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति चाहिए होगी.
YouTube Data API v3, इन स्कोप का इस्तेमाल करता है:
दायरा | ब्यौरा |
---|---|
https://www. |
अपना YouTube खाता मैनेज करें |
https://www. |
अपने चैनल के मौजूदा सक्रिय सदस्यों की सूची और उनका मौजूदा लेवल देखें. यह भी देखें कि वे चैनल के सदस्य कब बने |
https://www. |
अपने YouTube वीडियो की रेटिंग, टिप्पणियां और कैप्शन देखें, उनमें बदलाव करें और उन्हें हमेशा के लिए मिटाएं |
https://www. |
अपना YouTube खाता देखें |
https://www. |
अपने YouTube वीडियो मैनेज करें |
https://www. |
YouTube पर अपनी परिसंपत्ति और संबंधित सामग्री देखें व प्रबंधित करें |
https://www. |
किसी YouTube भागीदार की ऑडिट प्रक्रिया के दौरान उससे प्रासंगिक अपने YouTube चैनल की निजी जानकारी देखें |
इंस्टॉल किए गए ऐप्लिकेशन या डिवाइसों के लिए, अनुमति वाले स्कोप की सूची देखें.
OAuth 2.0 ऐक्सेस टोकन पाना
भले ही, आपका ऐप्लिकेशन सीमित इनपुट क्षमताओं वाले डिवाइस पर चलता हो, लेकिन लोगों के पास इस अनुमति फ़्लो को पूरा करने के लिए, बेहतर इनपुट क्षमताओं वाले डिवाइस का अलग से ऐक्सेस होना चाहिए. इस फ़्लो में ये चरण शामिल हैं:
- आपका ऐप्लिकेशन, Google के अनुमति देने वाले सर्वर को एक अनुरोध भेजता है. इससे उन स्कोप की पहचान होती है जिन्हें ऐक्सेस करने की अनुमति आपका ऐप्लिकेशन मांगेगा.
- इसके बाद, सर्वर कई तरह की जानकारी देता है. इसका इस्तेमाल अगले चरणों में किया जाता है. जैसे, डिवाइस कोड और उपयोगकर्ता कोड.
- ऐसी जानकारी दिखाई जाती है जिसे उपयोगकर्ता किसी दूसरे डिवाइस पर डालकर, आपके ऐप्लिकेशन को अनुमति दे सकता है.
- आपका ऐप्लिकेशन, Google के अनुमति देने वाले सर्वर से पोलिंग शुरू करता है. इससे यह पता चलता है कि उपयोगकर्ता ने आपके ऐप्लिकेशन को अनुमति दी है या नहीं.
- उपयोगकर्ता, ज़्यादा इनपुट क्षमताओं वाले डिवाइस पर स्विच करता है. इसके बाद, वह वेब ब्राउज़र लॉन्च करता है. इसके बाद, वह तीसरे चरण में दिखाए गए यूआरएल पर जाता है और तीसरे चरण में दिखाया गया कोड डालता है. इसके बाद, उपयोगकर्ता आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति दे सकता है या नहीं भी दे सकता.
- पोलिंग के आपके अगले अनुरोध के जवाब में, वे टोकन शामिल होते हैं जिनकी मदद से आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से किए गए अनुरोधों को अनुमति दे सकता है. (अगर उपयोगकर्ता ने आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति नहीं दी है, तो जवाब में टोकन शामिल नहीं होते.)
नीचे दी गई इमेज में इस प्रोसेस के बारे में बताया गया है:
यहां दिए गए सेक्शन में, इन चरणों के बारे में ज़्यादा जानकारी दी गई है. डिवाइसों में अलग-अलग तरह की सुविधाएं और रनटाइम एनवायरमेंट हो सकते हैं. इसलिए, इस दस्तावेज़ में दिखाए गए उदाहरणों में curl
कमांड लाइन यूटिलिटी का इस्तेमाल किया गया है. इन उदाहरणों को अलग-अलग भाषाओं और रनटाइम में आसानी से पोर्ट किया जा सकता है.
पहला चरण: डिवाइस और उपयोगकर्ता के कोड का अनुरोध करना
इस चरण में, आपका डिवाइस Google के अनुमति देने वाले सर्वर https://oauth2.googleapis.com/device/code
पर एक एचटीटीपी पोस्ट अनुरोध भेजता है. इससे आपके ऐप्लिकेशन की पहचान होती है. साथ ही, यह भी पता चलता है कि आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से किन ऐक्सेस स्कोप को ऐक्सेस करना चाहता है.
आपको इस यूआरएल को खोज से जुड़े दस्तावेज़ से पाना चाहिए. इसके लिए, device_authorization_endpoint
मेटाडेटा वैल्यू का इस्तेमाल करें. एचटीटीपी अनुरोध के ये पैरामीटर शामिल करें:
पैरामीटर | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
ज़रूरी है
आपके ऐप्लिकेशन का क्लाइंट आईडी. यह वैल्यू आपको में मिलेगी. |
||||||||||||||||
scope |
ज़रूरी है
यह स्पेस से अलग की गई स्कोप की सूची होती है. इससे उन संसाधनों की पहचान होती है जिन्हें आपका ऐप्लिकेशन, उपयोगकर्ता की ओर से ऐक्सेस कर सकता है. इन वैल्यू से, सहमति वाली उस स्क्रीन के बारे में पता चलता है जिसे Google, उपयोगकर्ता को दिखाता है. इंस्टॉल किए गए ऐप्लिकेशन या डिवाइसों के लिए, अनुमति वाले स्कोप की सूची देखें. स्कोप की मदद से, आपका ऐप्लिकेशन सिर्फ़ उन संसाधनों को ऐक्सेस करने का अनुरोध कर सकता है जिनकी उसे ज़रूरत है. साथ ही, इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा मिलती है कि वे आपके ऐप्लिकेशन को कितना ऐक्सेस दें. इसलिए, अनुरोध किए गए स्कोप की संख्या और उपयोगकर्ता की सहमति मिलने की संभावना के बीच उल्टा संबंध होता है. YouTube Data API v3, इन स्कोप का इस्तेमाल करता है:
OAuth 2.0 API स्कोप दस्तावेज़ में, उन सभी स्कोप की पूरी सूची दी गई है जिनका इस्तेमाल करके, Google API को ऐक्सेस किया जा सकता है. |
उदाहरण
यहां दिए गए स्निपेट में, अनुरोध का एक सैंपल दिखाया गया है:
POST /device/code HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=client_id&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl
इस उदाहरण में, एक ही अनुरोध भेजने के लिए curl
कमांड दिखाई गई है:
curl -d "client_id=client_id&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl" \ https://oauth2.googleapis.com/device/code
दूसरा चरण: अनुमति देने वाले सर्वर से मिले जवाब को मैनेज करना
ऑथराइज़ेशन सर्वर, इनमें से कोई एक जवाब देगा:
सफलता का रिस्पॉन्स
अगर अनुरोध मान्य है, तो आपको JSON ऑब्जेक्ट के तौर पर जवाब मिलेगा. इसमें ये प्रॉपर्टी शामिल होंगी:
प्रॉपर्टी | |
---|---|
device_code |
यह एक ऐसी वैल्यू है जिसे Google, ऐप्लिकेशन चलाने वाले डिवाइस की पहचान करने के लिए यूनीक तौर पर असाइन करता है. यह डिवाइस, अनुमति का अनुरोध करता है. उपयोगकर्ता, ज़्यादा इनपुट क्षमताओं वाले किसी दूसरे डिवाइस से उस डिवाइस को अनुमति देगा. उदाहरण के लिए, कोई व्यक्ति टीवी पर चल रहे ऐप्लिकेशन को अनुमति देने के लिए, लैपटॉप या मोबाइल फ़ोन का इस्तेमाल कर सकता है. इस मामले में, device_code टीवी की पहचान करता है.
इस कोड की मदद से, ऐप्लिकेशन चलाने वाला डिवाइस यह सुरक्षित तरीके से तय कर पाता है कि उपयोगकर्ता ने ऐक्सेस करने की अनुमति दी है या नहीं. |
expires_in |
device_code और user_code कितने सेकंड तक मान्य हैं. अगर इस दौरान, उपयोगकर्ता अनुमति देने की प्रोसेस पूरी नहीं करता है और आपका डिवाइस भी उपयोगकर्ता के फ़ैसले के बारे में जानकारी पाने के लिए पोल नहीं करता है, तो आपको यह प्रोसेस पहले चरण से फिर से शुरू करनी पड़ सकती है. |
interval |
इससे यह तय होता है कि आपका डिवाइस, पोलिंग के अनुरोधों के बीच कितने सेकंड तक इंतज़ार करेगा. उदाहरण के लिए, अगर वैल्यू 5 है, तो आपके डिवाइस को हर पांच सेकंड में, Google के अनुमति देने वाले सर्वर को पोलिंग का अनुरोध भेजना चाहिए. ज़्यादा जानकारी के लिए, तीसरा चरण देखें. |
user_code |
यह केस-सेंसिटिव वैल्यू होती है. इससे Google को उन स्कोप के बारे में पता चलता है जिनके लिए ऐप्लिकेशन ऐक्सेस का अनुरोध कर रहा है. आपका यूज़र इंटरफ़ेस (यूआई), उपयोगकर्ता को इस वैल्यू को किसी दूसरे डिवाइस पर डालने के लिए कहेगा. इस डिवाइस पर इनपुट देने की बेहतर सुविधाएं उपलब्ध होंगी. इसके बाद, Google इस वैल्यू का इस्तेमाल करके, स्कोप का सही सेट दिखाता है. ऐसा तब किया जाता है, जब उपयोगकर्ता को आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति देने के लिए कहा जाता है. |
verification_url |
यह एक ऐसा यूआरएल होता है जिस पर उपयोगकर्ता को किसी दूसरे डिवाइस पर जाकर, user_code डालना होता है. साथ ही, आपके ऐप्लिकेशन को ऐक्सेस करने की अनुमति देनी होती है या अनुमति नहीं देनी होती है. आपके उपयोगकर्ता इंटरफ़ेस पर भी यह वैल्यू दिखेगी. |
यहां जवाब का एक सैंपल दिखाया गया है:
{ "device_code": "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8", "user_code": "GQVQ-JKEC", "verification_url": "https://www.google.com/device", "expires_in": 1800, "interval": 5 }
कोटा से ज़्यादा अनुरोध होने पर मिलने वाला जवाब
अगर आपके डिवाइस कोड के अनुरोध, आपके क्लाइंट आईडी से जुड़े कोटे से ज़्यादा हो गए हैं, तो आपको 403 रिस्पॉन्स मिलेगा. इसमें यह गड़बड़ी शामिल होगी:
{ "error_code": "rate_limit_exceeded" }
ऐसे में, अनुरोधों की दर कम करने के लिए, बैकऑफ़ रणनीति का इस्तेमाल करें.
तीसरा चरण: उपयोगकर्ता कोड दिखाना
उपयोगकर्ता को दूसरे चरण में मिले verification_url
और user_code
दिखाएं. दोनों वैल्यू में, US-ASCII वर्ण सेट का कोई भी प्रिंट किया जा सकने वाला वर्ण शामिल किया जा सकता है. उपयोगकर्ता को दिखाए जाने वाले कॉन्टेंट में, उसे यह निर्देश दिया जाना चाहिए कि वह किसी दूसरे डिवाइस पर verification_url
पर जाए और user_code
डाले.
यूज़र इंटरफ़ेस (यूआई) को डिज़ाइन करते समय, इन नियमों का ध्यान रखें:
user_code
user_code
को ऐसे फ़ील्ड में दिखाया जाना चाहिए जिसमें 'W' साइज़ के 15 वर्ण शामिल किए जा सकते हों. दूसरे शब्दों में कहें, तो अगर कोडWWWWWWWWWWWWWWW
को सही तरीके से दिखाया जा सकता है, तो आपका यूज़र इंटरफ़ेस (यूआई) मान्य है. हमारा सुझाव है किuser_code
के यूज़र इंटरफ़ेस (यूआई) में दिखने के तरीके की जांच करते समय, उस स्ट्रिंग वैल्यू का इस्तेमाल करें.user_code
केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होता है. इसमें किसी भी तरह का बदलाव नहीं किया जाना चाहिए. जैसे, केस बदलना या फ़ॉर्मैटिंग के लिए इस्तेमाल होने वाले अन्य वर्ण डालना.
verification_url
verification_url
दिखाने के लिए, जगह इतनी चौड़ी होनी चाहिए कि उसमें 40 वर्णों वाली यूआरएल स्ट्रिंग आ सके.- आपको
verification_url
में किसी भी तरह का बदलाव नहीं करना चाहिए. हालांकि, डिसप्ले के लिए स्कीम को हटाने का विकल्प आपके पास होता है. अगर आपको यूआरएल से स्कीम (जैसे,https://
) को हटाना है, तो पक्का करें कि आपका ऐप्लिकेशनhttp
औरhttps
, दोनों वर्शन को हैंडल कर सकता हो.
चौथा चरण: Google के अनुमति देने वाले सर्वर से पोल करना
उपयोगकर्ता, verification_url
पर जाने और ऐक्सेस देने (या न देने) के लिए किसी दूसरे डिवाइस का इस्तेमाल करेगा. इसलिए, जब उपयोगकर्ता ऐक्सेस के अनुरोध का जवाब देता है, तो अनुरोध करने वाले डिवाइस को इसकी सूचना अपने-आप नहीं मिलती. इसलिए, अनुरोध करने वाले डिवाइस को Google के अनुमति देने वाले सर्वर से पोल करना होगा, ताकि यह पता चल सके कि उपयोगकर्ता ने अनुरोध का जवाब कब दिया.
अनुरोध करने वाले डिवाइस को पोलिंग के अनुरोध तब तक भेजते रहने चाहिए, जब तक उसे ऐसा जवाब न मिल जाए जिससे पता चले कि उपयोगकर्ता ने ऐक्सेस के अनुरोध का जवाब दे दिया है. इसके अलावा, उसे तब तक अनुरोध भेजते रहना चाहिए, जब तक
दूसरे चरण में मिले device_code
और user_code
की समयसीमा खत्म न हो जाए. दूसरे चरण में मिले interval
से पता चलता है कि अनुरोधों के बीच कितने सेकंड का इंतज़ार करना है.
पोल करने के लिए एंडपॉइंट का यूआरएल https://oauth2.googleapis.com/token
है. पोलिंग के अनुरोध में ये पैरामीटर शामिल होते हैं:
पैरामीटर | |
---|---|
client_id |
आपके ऐप्लिकेशन का क्लाइंट आईडी. यह वैल्यू आपको में मिलेगी. |
client_secret |
दिए गए client_id के लिए क्लाइंट सीक्रेट. यह वैल्यू आपको
में मिलेगी. |
device_code |
दूसरे चरण में ऑथराइज़ेशन सर्वर से मिला device_code . |
grant_type |
इस वैल्यू को urn:ietf:params:oauth:grant-type:device_code पर सेट करें. |
उदाहरण
यहां दिए गए स्निपेट में, अनुरोध का एक सैंपल दिखाया गया है:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=client_id& client_secret=client_secret& device_code=device_code& grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code
इस उदाहरण में, एक ही अनुरोध भेजने के लिए curl
कमांड दिखाई गई है:
curl -d "client_id=client_id&client_secret=client_secret& \ device_code=device_code& \ grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code" \ -H "Content-Type: application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/token
पांचवां चरण: उपयोगकर्ता, ऐक्सेस के अनुरोध का जवाब देता है
इस इमेज में, उपयोगकर्ताओं को दिखने वाले पेज जैसा ही एक पेज दिखाया गया है. यह पेज तब दिखता है, जब उपयोगकर्ता उस verification_url
पर नेविगेट करते हैं जिसे आपने तीसरे चरण में दिखाया था:
user_code
डालने के बाद, अगर उपयोगकर्ता ने Google में पहले से लॉग इन नहीं किया है, तो उसे लॉग इन करना होगा. इसके बाद, उसे सहमति वाली स्क्रीन दिखेगी. यह स्क्रीन नीचे दिखाई गई है:
छठा चरण: पोलिंग के अनुरोधों के जवाब मैनेज करना
Google का अनुमति देने वाला सर्वर, हर पोलिंग अनुरोध का जवाब इनमें से किसी एक तरीके से देता है:
ऐक्सेस दिया गया
अगर उपयोगकर्ता ने डिवाइस को ऐक्सेस करने की अनुमति दी है (सहमति वाली स्क्रीन पर Allow
पर क्लिक करके), तो रिस्पॉन्स में ऐक्सेस टोकन और रीफ़्रेश टोकन शामिल होता है. इन टोकन की मदद से, आपका डिवाइस उपयोगकर्ता की ओर से Google API ऐक्सेस कर सकता है. (जवाब में मौजूद scope
प्रॉपर्टी से यह तय होता है कि डिवाइस किन एपीआई को ऐक्सेस कर सकता है.)
इस मामले में, एपीआई रिस्पॉन्स में ये फ़ील्ड शामिल होते हैं:
फ़ील्ड | |
---|---|
access_token |
यह वह टोकन है जिसे आपका ऐप्लिकेशन, Google API के अनुरोध को अनुमति देने के लिए भेजता है. |
expires_in |
ऐक्सेस टोकन की बची हुई लाइफ़टाइम, सेकंड में. |
refresh_token |
यह एक ऐसा टोकन होता है जिसका इस्तेमाल करके, नया ऐक्सेस टोकन पाया जा सकता है. रीफ़्रेश टोकन तब तक मान्य होते हैं, जब तक उपयोगकर्ता ऐक्सेस रद्द नहीं कर देता या रीफ़्रेश टोकन की समयसीमा खत्म नहीं हो जाती. ध्यान दें कि डिवाइसों के लिए, रीफ़्रेश टोकन हमेशा दिखाए जाते हैं. |
refresh_token_expires_in |
रीफ़्रेश टोकन की बची हुई लाइफ़टाइम, सेकंड में. यह वैल्यू सिर्फ़ तब सेट होती है, जब उपयोगकर्ता समयसीमा के हिसाब से ऐक्सेस देता है. |
scope |
access_token से मिले ऐक्सेस के स्कोप. इन्हें केस-सेंसिटिव स्ट्रिंग की सूची के तौर पर दिखाया जाता है. इनके बीच में खाली जगह का इस्तेमाल किया जाता है. |
token_type |
लौटाया गया टोकन किस तरह का है. इस समय, इस फ़ील्ड की वैल्यू हमेशा Bearer पर सेट होती है. |
यहां जवाब का एक सैंपल दिखाया गया है:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email", "token_type": "Bearer", "refresh_token": "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
ऐक्सेस टोकन की समयसीमा सीमित होती है. अगर आपके ऐप्लिकेशन को लंबे समय तक किसी एपीआई को ऐक्सेस करने की ज़रूरत है, तो नया ऐक्सेस टोकन पाने के लिए, रिफ़्रेश टोकन का इस्तेमाल किया जा सकता है. अगर आपके ऐप्लिकेशन को इस तरह के ऐक्सेस की ज़रूरत है, तो उसे रीफ़्रेश टोकन को सेव करना चाहिए, ताकि बाद में उसका इस्तेमाल किया जा सके.
ऐक्सेस करने की मंज़ूरी नहीं मिली
अगर उपयोगकर्ता डिवाइस का ऐक्सेस देने से मना करता है, तो सर्वर से मिलने वाले जवाब में 403
एचटीटीपी रिस्पॉन्स स्टेटस कोड (Forbidden
) होता है. जवाब में यह गड़बड़ी शामिल होती है:
{ "error": "access_denied", "error_description": "Forbidden" }
अनुमति मिलना बाकी है
अगर उपयोगकर्ता ने अब तक ऑथराइज़ेशन फ़्लो पूरा नहीं किया है, तो सर्वर 428
एचटीटीपी रिस्पॉन्स स्टेटस कोड (Precondition Required
) दिखाता है. इस रिस्पॉन्स में यह गड़बड़ी शामिल होती है:
{ "error": "authorization_pending", "error_description": "Precondition Required" }
बहुत ज़्यादा बार पोलिंग करना
अगर डिवाइस, पोलिंग के अनुरोध बहुत बार भेजता है, तो सर्वर 403
एचटीटीपी रिस्पॉन्स स्टेटस कोड (Forbidden
) दिखाता है. इस जवाब में यह गड़बड़ी शामिल होती है:
{ "error": "slow_down", "error_description": "Forbidden" }
दूसरी गड़बड़ियां
अगर पोलिंग के अनुरोध में कोई ज़रूरी पैरामीटर मौजूद नहीं है या पैरामीटर की वैल्यू गलत है, तो अनुमति देने वाला सर्वर भी गड़बड़ियां दिखाता है. इन अनुरोधों में आम तौर पर, 400
(Bad Request
) या 401
(Unauthorized
) एचटीटीपी रिस्पॉन्स स्टेटस कोड होता है. इन गड़बड़ियों में ये शामिल हैं:
गड़बड़ी | एचटीटीपी स्टेटस कोड | ब्यौरा |
---|---|---|
admin_policy_enforced |
400 |
Google Workspace एडमिन की नीतियों की वजह से, Google खाता अनुरोध किए गए एक या उससे ज़्यादा स्कोप को अनुमति नहीं दे सकता. Google Workspace एडमिन के सहायता लेख यह कंट्रोल करना कि तीसरे पक्ष और आपके डोमेन के मालिकाना हक वाले किन ऐप्लिकेशन की मदद से Google Workspace के डेटा को ऐक्सेस किया जा सकता है पढ़ें. इसमें इस बारे में ज़्यादा जानकारी दी गई है कि एडमिन, OAuth क्लाइंट आईडी को साफ़ तौर पर ऐक्सेस देने तक, स्कोप के ऐक्सेस को कैसे सीमित कर सकता है. |
invalid_client |
401 |
OAuth क्लाइंट नहीं मिला. उदाहरण के लिए, यह गड़बड़ी तब दिखती है, जब OAuth क्लाइंट टाइप गलत है. पक्का करें कि क्लाइंट आईडी के लिए ऐप्लिकेशन टाइप को टीवी और सीमित इनपुट डिवाइस पर सेट किया गया हो. |
invalid_grant |
400 |
code पैरामीटर की वैल्यू अमान्य है, पहले ही दावा किया जा चुका है या उसे पार्स नहीं किया जा सकता. |
unsupported_grant_type |
400 |
grant_type पैरामीटर की वैल्यू अमान्य है. |
org_internal |
403 |
अनुरोध में मौजूद OAuth क्लाइंट आईडी, ऐसे प्रोजेक्ट का हिस्सा है जो किसी Google Cloud संगठन में Google खातों के ऐक्सेस को सीमित करता है. अपने OAuth ऐप्लिकेशन के लिए, उपयोगकर्ता के टाइप का कॉन्फ़िगरेशन की पुष्टि करें. |
Google API को कॉल करना
जब आपका ऐप्लिकेशन ऐक्सेस टोकन हासिल कर लेता है, तब आपके पास इस टोकन का इस्तेमाल करके, किसी Google API को कॉल करने का विकल्प होता है. हालांकि, ऐसा सिर्फ़ तब किया जा सकता है, जब एपीआई के लिए ज़रूरी स्कोप का ऐक्सेस दिया गया हो. इसके लिए, एपीआई को भेजे जाने वाले अनुरोध में ऐक्सेस टोकन शामिल करें. इसके लिए, access_token
क्वेरी पैरामीटर या Authorization
एचटीटीपी हेडर Bearer
वैल्यू में से किसी एक को शामिल करें. जब भी हो सके, एचटीटीपी हेडर का इस्तेमाल करें. ऐसा इसलिए, क्योंकि क्वेरी स्ट्रिंग, सर्वर लॉग में दिखती हैं. ज़्यादातर मामलों में, Google APIs को कॉल करने के लिए क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है. उदाहरण के लिए, YouTube Live Streaming API को कॉल करते समय.
ध्यान दें कि YouTube Live Streaming API, सेवा खाते के फ़्लो के साथ काम नहीं करता. किसी सेवा खाते को YouTube खाते से लिंक नहीं किया जा सकता. इसलिए, इस फ़्लो का इस्तेमाल करके अनुरोधों को अनुमति देने की कोशिश करने पर, NoLinkedYouTubeAccount
गड़बड़ी दिखेगी.
OAuth 2.0 Playground पर जाकर, Google के सभी एपीआई आज़माए जा सकते हैं. साथ ही, उनके स्कोप देखे जा सकते हैं.
एचटीटीपी GET के उदाहरण
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
ऐक्सेस टोकन रीफ़्रेश करना
ऐक्सेस टोकन की समयसीमा समय-समय पर खत्म हो जाती है. इसके बाद, वे एपीआई से जुड़े अनुरोध के लिए अमान्य क्रेडेंशियल बन जाते हैं. अगर आपने टोकन से जुड़े स्कोप के लिए ऑफ़लाइन ऐक्सेस का अनुरोध किया है, तो उपयोगकर्ता से अनुमति मांगे बिना ऐक्सेस टोकन को रीफ़्रेश किया जा सकता है. ऐसा तब भी किया जा सकता है, जब उपयोगकर्ता मौजूद न हो.
ऐक्सेस टोकन को रीफ़्रेश करने के लिए, आपका ऐप्लिकेशन Google के ऑथराइज़ेशन सर्वर (https://oauth2.googleapis.com/token
) को एचटीटीपीएस POST
अनुरोध भेजता है. इसमें ये पैरामीटर शामिल होते हैं:
फ़ील्ड | |
---|---|
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 https://www.googleapis.com/auth/calendar.readonly", "token_type": "Bearer" }
ध्यान दें कि जारी किए जाने वाले रीफ़्रेश टोकन की संख्या सीमित होती है. एक सीमा, क्लाइंट/उपयोगकर्ता के कॉम्बिनेशन के हिसाब से होती है. दूसरी सीमा, सभी क्लाइंट के लिए उपयोगकर्ता के हिसाब से होती है. आपको रीफ़्रेश टोकन को लंबे समय तक सेव करके रखना चाहिए. साथ ही, जब तक वे मान्य हैं, तब तक उनका इस्तेमाल जारी रखना चाहिए. अगर आपका ऐप्लिकेशन बहुत ज़्यादा रीफ़्रेश टोकन का अनुरोध करता है, तो हो सकता है कि वह इन सीमाओं का उल्लंघन करे. ऐसे में, पुराने रीफ़्रेश टोकन काम करना बंद कर देंगे.
टोकन रद्द करना
कुछ मामलों में, उपयोगकर्ता किसी ऐप्लिकेशन को दिया गया ऐक्सेस वापस लेना चाहता है. कोई उपयोगकर्ता, खाते की सेटिंग में जाकर, ऐक्सेस रद्द कर सकता है. ज़्यादा जानकारी के लिए, सहायता दस्तावेज़ में ऐसी साइट या ऐप्लिकेशन का ऐक्सेस हटाना जो आपका खाता ऐक्सेस कर सकते हैं सेक्शन देखें. यह सेक्शन, तीसरे पक्ष की ऐसी साइटें और ऐप्लिकेशन जिनके पास आपके खाते का ऐक्सेस है में मौजूद है.
ऐप्लिकेशन के पास, प्रोग्राम के हिसाब से दिए गए ऐक्सेस को रद्द करने का विकल्प भी होता है. प्रोग्राम के हिसाब से सदस्यता रद्द करने की सुविधा, उन मामलों में ज़रूरी होती है जहां कोई उपयोगकर्ता सदस्यता रद्द करता है, किसी ऐप्लिकेशन को हटाता है या किसी ऐप्लिकेशन के लिए ज़रूरी एपीआई संसाधनों में काफ़ी बदलाव हुआ है. दूसरे शब्दों में कहें, तो हटाने की प्रोसेस में एपीआई का अनुरोध शामिल हो सकता है. इससे यह पक्का किया जा सकता है कि ऐप्लिकेशन को पहले दी गई अनुमतियां हटा दी गई हैं.
प्रोग्राम के हिसाब से टोकन रद्द करने के लिए, आपका ऐप्लिकेशन 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
भी दिखाया जाता है.
अनुमति वाले स्कोप
डिवाइसों के लिए OAuth 2.0 फ़्लो, सिर्फ़ इन स्कोप के लिए काम करता है:
OpenID Connect, Google साइन-इन
email
openid
profile
Drive API
https://www.googleapis.com/auth/drive.appdata
https://www.googleapis.com/auth/drive.file
YouTube API
https://www.googleapis.com/auth/youtube
https://www.googleapis.com/auth/youtube.readonly
समय के हिसाब से ऐक्सेस
समय के हिसाब से ऐक्सेस देने की सुविधा की मदद से, कोई उपयोगकर्ता आपके ऐप्लिकेशन को सीमित समय के लिए अपने डेटा का ऐक्सेस दे सकता है. इससे ऐप्लिकेशन को कोई कार्रवाई पूरी करने में मदद मिलती है. सहमति लेने के फ़्लो के दौरान, समय के हिसाब से ऐक्सेस देने की सुविधा, Google के चुनिंदा प्रॉडक्ट में उपलब्ध है. इससे लोगों को सीमित समय के लिए ऐक्सेस देने का विकल्प मिलता है. इसका एक उदाहरण Data Portability API है. यह डेटा को एक बार ट्रांसफ़र करने की सुविधा देता है.
जब कोई उपयोगकर्ता आपके ऐप्लिकेशन को तय समय के लिए ऐक्सेस करने की अनुमति देता है, तो तय समय के बाद रीफ़्रेश टोकन की समयसीमा खत्म हो जाएगी. ध्यान दें कि कुछ खास मामलों में, रीफ़्रेश टोकन की समयसीमा पहले ही खत्म हो सकती है. ज़्यादा जानकारी के लिए, ये मामले देखें. ऑथराइज़ेशन कोड एक्सचेंज रिस्पॉन्स में दिखाया गया refresh_token_expires_in
फ़ील्ड, ऐसे मामलों में रीफ़्रेश टोकन की समयसीमा खत्म होने तक का बचा हुआ समय दिखाता है.
'सभी खातों की सुरक्षा' सुविधा लागू करना
अपने उपयोगकर्ताओं के खातों को सुरक्षित रखने के लिए, आपको एक और कदम उठाना चाहिए. इसके लिए, Google की Cross-Account Protection Service का इस्तेमाल करके, Cross-Account Protection लागू करें. इस सेवा की मदद से, सुरक्षा से जुड़ी घटनाओं की सूचनाएं पाने के लिए सदस्यता ली जा सकती है. इससे आपके ऐप्लिकेशन को, उपयोगकर्ता के खाते में हुए बड़े बदलावों के बारे में जानकारी मिलती है. इसके बाद, इस जानकारी का इस्तेमाल करके कार्रवाई की जा सकती है. यह इस बात पर निर्भर करता है कि आपको इवेंट का जवाब कैसे देना है.
Google की Cross-Account Protection Service, आपके ऐप्लिकेशन को इस तरह के इवेंट भेजती है:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
सभी खातों की सुरक्षा की सुविधा लागू करने के तरीके और उपलब्ध इवेंट की पूरी सूची के बारे में ज़्यादा जानने के लिए, सभी खातों की सुरक्षा की सुविधा की मदद से उपयोगकर्ता खातों को सुरक्षित रखें पेज देखें.