मोबाइल और डेस्कटॉप ऐप्स के लिए OAuth 2.0

यह दस्तावेज़ बताता है कि फ़ोन, टैबलेट और कंप्यूटर जैसे उपकरणों पर इंस्टॉल किए गए एप्लिकेशन Google API तक पहुंच को अधिकृत करने के लिए Google के OAuth 2.0 एंडपॉइंट का उपयोग कैसे करते हैं।

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

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

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

वैकल्पिक

मोबाइल ऐप्स के लिए, आप Android या iOS के लिए Google साइन-इन का उपयोग करना पसंद कर सकते हैं। Google साइन-इन क्लाइंट लाइब्रेरी प्रमाणीकरण और उपयोगकर्ता प्राधिकरण को संभालती है, और उन्हें यहां वर्णित निचले स्तर के प्रोटोकॉल की तुलना में लागू करना आसान हो सकता है।

ऐसे डिवाइस पर चलने वाले ऐप्स के लिए जो सिस्टम ब्राउज़र का समर्थन नहीं करते हैं या जिनकी सीमित इनपुट क्षमताएं हैं, जैसे टीवी, गेम कंसोल, कैमरा या प्रिंटर, टीवी और डिवाइस के लिए OAuth 2.0 या टीवी और सीमित इनपुट डिवाइस पर साइन-इन देखें

पुस्तकालय और नमूने

इस दस्तावेज़ में वर्णित OAuth 2.0 प्रवाह को लागू करने में आपकी सहायता करने के लिए हम निम्नलिखित पुस्तकालयों और नमूनों की अनुशंसा करते हैं:

आवश्यक शर्तें

अपने प्रोजेक्ट के लिए API सक्षम करें

Google API को कॉल करने वाले किसी भी एप्लिकेशन को API Consoleमें उन API को सक्षम करने की आवश्यकता होती है।

अपने प्रोजेक्ट के लिए API सक्षम करने के लिए:

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

प्राधिकरण क्रेडेंशियल बनाएं

Google API तक पहुंचने के लिए OAuth 2.0 का उपयोग करने वाले किसी भी एप्लिकेशन के पास प्राधिकरण क्रेडेंशियल होना चाहिए जो Google के OAuth 2.0 सर्वर पर एप्लिकेशन की पहचान करता हो। निम्नलिखित चरण बताते हैं कि अपने प्रोजेक्ट के लिए क्रेडेंशियल कैसे बनाएं। तब आपके एप्लिकेशन उन API तक पहुंचने के लिए क्रेडेंशियल्स का उपयोग कर सकते हैं जिन्हें आपने उस प्रोजेक्ट के लिए सक्षम किया है।

  1. Go to the Credentials page.
  2. क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी पर क्लिक करें.
  3. नीचे दिए गए अनुभाग क्लाइंट प्रकारों और Google के प्राधिकरण सर्वर द्वारा समर्थित रीडायरेक्ट विधियों का वर्णन करते हैं। आपके आवेदन के लिए अनुशंसित क्लाइंट प्रकार चुनें, अपने OAuth क्लाइंट को नाम दें, और अन्य फ़ील्ड को उपयुक्त रूप में सेट करें।

कस्टम यूआरआई योजना (एंड्रॉइड, आईओएस, यूडब्ल्यूपी)

एंड्रॉइड ऐप, आईओएस ऐप और यूनिवर्सल विंडोज प्लेटफॉर्म (यूडब्ल्यूपी) ऐप के लिए एक कस्टम यूआरआई योजना की सिफारिश की जाती है।

एंड्रॉयड
  1. Android एप्लिकेशन प्रकार चुनें।
  2. OAuth क्लाइंट के लिए एक नाम दर्ज करें। क्लाइंट की पहचान करने के लिए यह नाम आपके प्रोजेक्ट के Credentials page पर प्रदर्शित होता है।
  3. अपने Android ऐप का पैकेज नाम दर्ज करें। यह मान आपकी ऐप मेनिफेस्ट फ़ाइल में<manifest> तत्व की package विशेषता में परिभाषित किया गया है।
  4. ऐप वितरण का SHA-1 हस्ताक्षर प्रमाणपत्र फ़िंगरप्रिंट दर्ज करें।
    • अगर आपका ऐप्लिकेशन Google Play की ऐप्लिकेशन साइनिंग का इस्तेमाल करता है, तो Play कंसोल के ऐप्लिकेशन साइनिंग पेज से SHA-1 फ़िंगरप्रिंट कॉपी करें.
    • यदि आप अपने स्वयं के कीस्टोर और साइनिंग कुंजियों का प्रबंधन करते हैं, तो मानव-पढ़ने योग्य प्रारूप में प्रमाणपत्र जानकारी को प्रिंट करने के लिए जावा के साथ शामिल कीटूल उपयोगिता का उपयोग करें। कीटूल आउटपुट के Certificate fingerprints अनुभाग में SHA1 मान की प्रतिलिपि बनाएँ। अधिक जानकारी के लिए Android दस्तावेज़ के लिए Google API में अपने क्लाइंट को प्रमाणित करना देखें।
  5. बनाएं क्लिक करें.
आईओएस
  1. आईओएस एप्लिकेशन प्रकार का चयन करें।
  2. OAuth क्लाइंट के लिए एक नाम दर्ज करें। क्लाइंट की पहचान करने के लिए यह नाम आपके प्रोजेक्ट के Credentials page पर प्रदर्शित होता है।
  3. अपने ऐप के लिए बंडल पहचानकर्ता दर्ज करें। बंडल आईडी आपके ऐप की सूचना संपत्ति सूची संसाधन फ़ाइल ( info.plist ) में CFBundleIdentifier कुंजी का मान है। मान सबसे सामान्य फलक या Xcode प्रोजेक्ट एडिटर के साइनिंग और क्षमताओं फलक में प्रदर्शित होता है। बंडल आईडी ऐपल के ऐप स्टोर कनेक्ट साइट पर ऐप के लिए ऐप इंफॉर्मेशन पेज के जनरल इंफॉर्मेशन सेक्शन में भी प्रदर्शित होता है।
  4. (वैकल्पिक)

    अगर ऐप ऐप्पल के ऐप स्टोर में प्रकाशित हुआ है तो अपने ऐप का ऐप स्टोर आईडी डालें। स्टोर आईडी प्रत्येक ऐप्पल ऐप स्टोर यूआरएल में शामिल एक संख्यात्मक स्ट्रिंग है।

    1. अपने iOS या iPadOS डिवाइस पर Apple ऐप स्टोर ऐप खोलें।
    2. अपना ऐप खोजें।
    3. शेयर बटन का चयन करें (वर्ग और तीर ऊपर का प्रतीक)।
    4. कॉपी लिंक का चयन करें।
    5. लिंक को टेक्स्ट एडिटर में पेस्ट करें। ऐप स्टोर आईडी यूआरएल का अंतिम हिस्सा है।

      उदाहरण: https://apps.apple.com/app/google/id 284815942

  5. (वैकल्पिक)

    अपनी टीम आईडी दर्ज करें। अधिक जानकारी के लिए Apple डेवलपर खाता दस्तावेज़ में अपनी टीम आईडी ढूँढ़ें देखें।

  6. बनाएं क्लिक करें.
यूडब्ल्यूपी
  1. यूनिवर्सल विंडोज प्लेटफॉर्म एप्लिकेशन प्रकार का चयन करें।
  2. OAuth क्लाइंट के लिए एक नाम दर्ज करें। क्लाइंट की पहचान करने के लिए यह नाम आपके प्रोजेक्ट के Credentials page पर प्रदर्शित होता है।
  3. अपने ऐप की 12-वर्ण वाली Microsoft Store ID दर्ज करें। आप इस मान को ऐप प्रबंधन अनुभाग में ऐप पहचान पृष्ठ पर माइक्रोसॉफ्ट पार्टनर सेंटर में पा सकते हैं।
  4. बनाएं क्लिक करें.

UWP ऐप्स के लिए, कस्टम URI स्कीम 39 वर्णों से अधिक लंबी नहीं हो सकती।

लूपबैक आईपी एड्रेस (मैकओएस, लिनक्स, विंडोज डेस्कटॉप)

इस URL का उपयोग करके प्राधिकरण कोड प्राप्त करने के लिए, आपका एप्लिकेशन स्थानीय वेब सर्वर पर सुन रहा होगा। यह कई प्लेटफॉर्म पर संभव है, लेकिन सभी प्लेटफॉर्म पर नहीं। हालाँकि, यदि आपका प्लेटफ़ॉर्म इसका समर्थन करता है, तो प्राधिकरण कोड प्राप्त करने के लिए यह अनुशंसित तंत्र है।

जब आपका ऐप प्राधिकरण प्रतिक्रिया प्राप्त करता है, तो सर्वोत्तम उपयोगिता के लिए उसे एक HTML पृष्ठ प्रदर्शित करके प्रतिक्रिया देनी चाहिए जो उपयोगकर्ता को ब्राउज़र बंद करने और आपके ऐप पर वापस जाने का निर्देश देता है।

अनुशंसित उपयोग macOS, Linux और Windows डेस्कटॉप (लेकिन यूनिवर्सल Windows प्लेटफ़ॉर्म नहीं) ऐप्स
फॉर्म मान एप्लिकेशन प्रकार को डेस्कटॉप ऐप पर सेट करें।

मैनुअल कॉपी/पेस्ट

एक्सेस स्कोप की पहचान करें

स्कोप आपके एप्लिकेशन को केवल उन संसाधनों तक पहुंच का अनुरोध करने में सक्षम बनाता है जिनकी उसे आवश्यकता होती है जबकि उपयोगकर्ताओं को आपके एप्लिकेशन को प्रदान की जाने वाली पहुंच की मात्रा को नियंत्रित करने में सक्षम बनाता है। इस प्रकार, अनुरोध किए गए कार्यक्षेत्रों की संख्या और उपयोगकर्ता की सहमति प्राप्त करने की संभावना के बीच एक विपरीत संबंध हो सकता है।

इससे पहले कि आप OAuth 2.0 प्राधिकरण को लागू करना शुरू करें, हम अनुशंसा करते हैं कि आप उन क्षेत्रों की पहचान करें जिन्हें एक्सेस करने के लिए आपके ऐप को अनुमति की आवश्यकता होगी।

OAuth 2.0 API स्कोप दस्तावेज़ में उन कार्यक्षेत्रों की पूरी सूची है जिनका उपयोग आप Google API तक पहुँचने के लिए कर सकते हैं।

OAuth 2.0 एक्सेस टोकन प्राप्त करना

निम्नलिखित चरण दिखाते हैं कि उपयोगकर्ता की ओर से एपीआई अनुरोध करने के लिए उपयोगकर्ता की सहमति प्राप्त करने के लिए आपका एप्लिकेशन Google के OAuth 2.0 सर्वर के साथ कैसे इंटरैक्ट करता है। उपयोगकर्ता प्राधिकरण की आवश्यकता वाले Google API अनुरोध को निष्पादित करने से पहले आपके आवेदन में वह सहमति होनी चाहिए।

चरण 1: एक कोड सत्यापनकर्ता उत्पन्न करें और चुनौती दें

Google इंस्टॉल किए गए एप्लिकेशन प्रवाह को अधिक सुरक्षित बनाने के लिए प्रूफ़ कुंजी फ़ॉर कोड एक्सचेंज (PKCE) प्रोटोकॉल का समर्थन करता है। प्रत्येक प्राधिकरण अनुरोध के लिए एक अद्वितीय कोड सत्यापनकर्ता बनाया जाता है, और इसका रूपांतरित मूल्य, जिसे "code_challenge" कहा जाता है, प्राधिकरण कोड प्राप्त करने के लिए प्राधिकरण सर्वर को भेजा जाता है।

कोड सत्यापनकर्ता बनाएं

एक code_verifier अनारक्षित वर्णों [AZ] / [az] / [0-9] / "-" / "" का उपयोग करके एक उच्च-एन्ट्रॉपी क्रिप्टोग्राफ़िक यादृच्छिक स्ट्रिंग है। / "_" / "~", न्यूनतम लंबाई 43 वर्णों और अधिकतम लंबाई 128 वर्णों के साथ।

कोड सत्यापनकर्ता के पास मूल्य का अनुमान लगाने के लिए इसे अव्यावहारिक बनाने के लिए पर्याप्त एन्ट्रापी होनी चाहिए।

कोड चुनौती बनाएं

कोड चुनौती बनाने के दो तरीके समर्थित हैं।

कोड चैलेंज जनरेशन मेथड्स
S256 (अनुशंसित) कोड चुनौती बेस 64URL (बिना पैडिंग के) कोड सत्यापनकर्ता का SHA256 हैश एन्कोडेड है।
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
मैदान कोड चुनौती वही मान है जो ऊपर जेनरेट किए गए कोड सत्यापनकर्ता के रूप में है।
code_challenge = code_verifier

चरण 2: Google के OAuth 2.0 सर्वर को एक अनुरोध भेजें

उपयोगकर्ता प्राधिकरण प्राप्त करने के लिए, Google के प्राधिकरण सर्वर को https://accounts.google.com/o/oauth2/v2/auth पर एक अनुरोध भेजें। यह समापन बिंदु सक्रिय सत्र लुकअप को संभालता है, उपयोगकर्ता को प्रमाणित करता है, और उपयोगकर्ता की सहमति प्राप्त करता है। एंडपॉइंट केवल एसएसएल पर ही पहुंच योग्य है, और यह HTTP (गैर-एसएसएल) कनेक्शन को अस्वीकार कर देता है।

प्राधिकरण सर्वर स्थापित अनुप्रयोगों के लिए निम्नलिखित क्वेरी स्ट्रिंग पैरामीटर का समर्थन करता है:

मापदंडों
client_id आवश्यक

आपके आवेदन के लिए क्लाइंट आईडी। आप यह मान API ConsoleCredentials pageमें पा सकते हैं।

redirect_uri आवश्यक

यह निर्धारित करता है कि Google का प्राधिकरण सर्वर आपके ऐप को कैसे प्रतिक्रिया भेजता है। इंस्टॉल किए गए ऐप्स के लिए कई रीडायरेक्ट विकल्प उपलब्ध हैं, और आपने अपने प्राधिकरण क्रेडेंशियल को एक विशेष रीडायरेक्ट विधि को ध्यान में रखकर सेट किया होगा।

मान OAuth 2.0 क्लाइंट के लिए अधिकृत रीडायरेक्ट रीडायरेक्ट URI में से किसी एक से सटीक रूप से मेल खाना चाहिए, जिसे आपने अपने क्लाइंट के API ConsoleCredentials pageमें कॉन्फ़िगर किया है। यदि यह मान किसी अधिकृत URI से मेल नहीं खाता है, तो आपको एक redirect_uri_mismatch त्रुटि मिलेगी।

नीचे दी गई तालिका प्रत्येक विधि के लिए उपयुक्त redirect_uri पैरामीटर मान दिखाती है:

redirect_uri मान
कस्टम यूआरआई योजना com.example.app : redirect_uri_path

या

com.googleusercontent.apps.123 : redirect_uri_path
  • com.example.app आपके नियंत्रण में किसी डोमेन का रिवर्स DNS नोटेशन है। कस्टम योजना में मान्य होने के लिए एक अवधि होनी चाहिए।
  • com.googleusercontent.apps.123 क्लाइंट आईडी का उल्टा DNS नोटेशन है।
  • redirect_uri_path एक वैकल्पिक पथ घटक है, जैसे /oauth2redirect । ध्यान दें कि पथ एकल स्लैश से शुरू होना चाहिए, जो नियमित HTTP URL से अलग है।
लूपबैक आईपी पता http://127.0.0.1: port या http://[::1]: port

प्रासंगिक लूपबैक आईपी पते के लिए अपने प्लेटफॉर्म को क्वेरी करें और एक यादृच्छिक उपलब्ध पोर्ट पर एक HTTP श्रोता शुरू करें। port को उस वास्तविक पोर्ट नंबर से बदलें जिस पर आपका ऐप सुनता है।

मैनुअल कॉपी/पेस्ट urn:ietf:wg:oauth:2.0:oob
प्रोग्रामेटिक निष्कर्षण urn:ietf:wg:oauth:2.0:oob:auto
response_type आवश्यक

निर्धारित करता है कि Google OAuth 2.0 एंडपॉइंट एक प्राधिकरण कोड लौटाता है या नहीं।

स्थापित अनुप्रयोगों के लिए पैरामीटर मान को code पर सेट करें।

scope आवश्यक

कार्यक्षेत्रों की एक अंतरिक्ष-सीमांकित सूची जो उन संसाधनों की पहचान करती है जिन्हें आपका एप्लिकेशन उपयोगकर्ता की ओर से एक्सेस कर सकता है। ये मान उस सहमति स्क्रीन को सूचित करते हैं जिसे Google उपयोगकर्ता को प्रदर्शित करता है।

स्कोप आपके एप्लिकेशन को केवल उन संसाधनों तक पहुंच का अनुरोध करने में सक्षम बनाता है जिनकी उसे आवश्यकता होती है जबकि उपयोगकर्ताओं को आपके एप्लिकेशन को प्रदान की जाने वाली पहुंच की मात्रा को नियंत्रित करने में सक्षम बनाता है। इस प्रकार, अनुरोध किए गए कार्यक्षेत्रों की संख्या और उपयोगकर्ता की सहमति प्राप्त करने की संभावना के बीच एक विपरीत संबंध है।

code_challenge अनुशंसित

एक एन्कोडेड code_verifier निर्दिष्ट करता है जिसे प्राधिकरण कोड विनिमय के दौरान सर्वर-साइड चुनौती के रूप में उपयोग किया जाएगा। अधिक जानकारी के लिए ऊपर क्रिएट कोड चैलेंज सेक्शन देखें।

code_challenge_method अनुशंसित

निर्दिष्ट करता है कि code_verifier को एन्कोड करने के लिए किस विधि का उपयोग किया गया था जिसका उपयोग प्राधिकरण कोड विनिमय के दौरान किया जाएगा। इस पैरामीटर का उपयोग ऊपर वर्णित code_challenge पैरामीटर के साथ किया जाना चाहिए। code_challenge_method का मान डिफ़ॉल्ट रूप से plain हो जाता है यदि अनुरोध में मौजूद नहीं है जिसमें code_challenge शामिल है। इस पैरामीटर के लिए केवल समर्थित मान S256 या plain हैं।

state अनुशंसित

आपके प्राधिकरण अनुरोध और प्राधिकरण सर्वर की प्रतिक्रिया के बीच स्थिति बनाए रखने के लिए आपके एप्लिकेशन द्वारा उपयोग किए जाने वाले किसी भी स्ट्रिंग मान को निर्दिष्ट करता है। जब उपयोगकर्ता आपके एप्लिकेशन के एक्सेस अनुरोध को स्वीकार या अस्वीकार करता है, तो सर्वर redirect_uri के URL फ़्रैगमेंट आइडेंटिफ़ायर ( # ) में name=value युग्म के रूप में आपके द्वारा भेजा गया सटीक मान लौटाता है।

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

login_hint ऐच्छिक

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

पैरामीटर मान को ईमेल पते या sub पहचानकर्ता पर सेट करें, जो उपयोगकर्ता की Google आईडी के बराबर है।

नमूना प्राधिकरण URL

नीचे दिए गए टैब विभिन्न रीडायरेक्ट यूआरआई विकल्पों के लिए नमूना प्राधिकरण URL दिखाते हैं।

redirect_uri पैरामीटर के मान को छोड़कर URL समान हैं। URL में आवश्यक response_type और client_id पैरामीटर के साथ-साथ वैकल्पिक state पैरामीटर भी होते हैं। प्रत्येक URL में पठनीयता के लिए पंक्ति विराम और रिक्त स्थान होते हैं।

कस्टम यूआरआई योजना

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

लूपबैक आईपी पता

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

कॉपी पेस्ट

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&
 client_id=client_id

प्रोग्रामेटिक निष्कर्षण

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob%3Aauto&
 client_id=client_id

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

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

आपके एप्लिकेशन को इस स्तर पर कुछ भी करने की आवश्यकता नहीं है क्योंकि यह Google के OAuth 2.0 सर्वर से प्रतिक्रिया की प्रतीक्षा कर रहा है, यह दर्शाता है कि कोई एक्सेस दी गई थी या नहीं। उस प्रतिक्रिया को निम्नलिखित चरण में समझाया गया है।

त्रुटियाँ

Google के OAuth 2.0 प्राधिकरण समापन बिंदु के अनुरोध अपेक्षित प्रमाणीकरण और प्राधिकरण प्रवाह के बजाय उपयोगकर्ता-सामना करने वाले त्रुटि संदेश प्रदर्शित कर सकते हैं। सामान्य त्रुटि कोड और सुझाए गए समाधान नीचे सूचीबद्ध हैं।

admin_policy_enforced

Google खाता उनके Google कार्यस्थान व्यवस्थापक की नीतियों के कारण अनुरोधित एक या अधिक क्षेत्रों को अधिकृत करने में असमर्थ है। जब तक आपकी OAuth क्लाइंट आईडी को स्पष्ट रूप से पहुंच प्रदान नहीं की जाती है, तब तक एक व्यवस्थापक सभी क्षेत्रों या संवेदनशील और प्रतिबंधित क्षेत्रों तक पहुंच को कैसे प्रतिबंधित कर सकता है, इस बारे में अधिक जानकारी के लिए Google कार्यस्थान व्यवस्थापक सहायता आलेख देखें।

disallowed_useragent

प्राधिकरण समापन बिंदु एक एम्बेडेड उपयोगकर्ता-एजेंट के अंदर प्रदर्शित होता है जिसे Google की OAuth 2.0 नीतियों द्वारा अस्वीकृत किया जाता है।

एंड्रॉयड

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

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

आईओएस

WKWebView में प्राधिकरण अनुरोध खोलते समय iOS और macOS डेवलपर इस त्रुटि का सामना कर सकते हैं। इसके बजाय डेवलपर्स को iOS लाइब्रेरी का उपयोग करना चाहिए जैसे कि iOS के लिए Google साइन-इन या iOS के लिए OpenID Foundation का AppAuth

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

org_internal

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

redirect_uri_mismatch

प्राधिकरण अनुरोध में पारित redirect_uri OAuth क्लाइंट आईडी के लिए अधिकृत रीडायरेक्ट URI से मेल नहीं खाता। Google API Console Credentials pageplaceholder96 में अधिकृत रीडायरेक्ट URI की समीक्षा करें।

पास किया गया redirect_uri क्लाइंट प्रकार के लिए अमान्य हो सकता है।

चरण 4: OAuth 2.0 सर्वर प्रतिक्रिया को संभालें

जिस तरह से आपका आवेदन प्राधिकरण प्रतिक्रिया प्राप्त करता है वह रीडायरेक्ट यूआरआई योजना पर निर्भर करता है जिसका वह उपयोग करता है। योजना के बावजूद, प्रतिक्रिया में या तो एक प्राधिकरण कोड ( code ) या एक त्रुटि ( error ) होगी। उदाहरण के लिए, error=access_denied इंगित करता है कि उपयोगकर्ता ने अनुरोध को अस्वीकार कर दिया है।

यदि उपयोगकर्ता आपके आवेदन तक पहुंच प्रदान करता है, तो आप अगले चरण में वर्णित अनुसार एक्सेस टोकन और रीफ्रेश टोकन के लिए प्राधिकरण कोड का आदान-प्रदान कर सकते हैं।

चरण 5: ताज़ा करने और टोकन तक पहुँचने के लिए प्राधिकरण कोड का आदान-प्रदान करें

एक्सेस टोकन के लिए प्राधिकरण कोड का आदान-प्रदान करने के लिए, https://oauth2.googleapis.com/token एंडपॉइंट पर कॉल करें और निम्नलिखित पैरामीटर सेट करें:

खेत
client_id API ConsoleCredentials pageplaceholder99 से प्राप्त क्लाइंट आईडी।
client_secret क्लाइंट सीक्रेट API ConsoleCredentials pageplaceholder101 से प्राप्त किया गया।
code प्रारंभिक अनुरोध से प्राधिकरण कोड लौटा।
code_verifier चरण 1 में आपके द्वारा बनाया गया कोड सत्यापनकर्ता।
grant_type जैसा कि OAuth 2.0 विनिर्देश में परिभाषित किया गया है , इस फ़ील्ड का मान authorization_code पर सेट होना चाहिए।
redirect_uri दिए गए client_id के लिए API ConsoleCredentials page placeholder103 में आपके प्रोजेक्ट के लिए सूचीबद्ध रीडायरेक्ट URI में से एक।

निम्नलिखित स्निपेट एक नमूना अनुरोध दिखाता है:

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=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob%3Aauto&
grant_type=authorization_code

Google एक JSON ऑब्जेक्ट लौटाकर इस अनुरोध का जवाब देता है जिसमें एक अल्पकालिक एक्सेस टोकन और एक ताज़ा टोकन होता है।

प्रतिक्रिया में निम्नलिखित फ़ील्ड शामिल हैं:

खेत
access_token वह टोकन जिसे आपका एप्लिकेशन Google API अनुरोध को अधिकृत करने के लिए भेजता है।
expires_in एक्सेस टोकन का शेष जीवनकाल सेकंड में।
id_token नोट: यह गुण केवल तभी लौटाया जाता है जब आपके अनुरोध में एक पहचान क्षेत्र शामिल होता है, जैसे कि openid , profile , या email । मान एक JSON वेब टोकन (JWT) है जिसमें उपयोगकर्ता के बारे में डिजिटल रूप से हस्ताक्षरित पहचान जानकारी होती है।
refresh_token एक टोकन जिसे आप एक नया एक्सेस टोकन प्राप्त करने के लिए उपयोग कर सकते हैं। रीफ्रेश टोकन तब तक मान्य होते हैं जब तक उपयोगकर्ता पहुंच को रद्द नहीं कर देता। ध्यान दें कि इंस्टॉल किए गए एप्लिकेशन के लिए ताज़ा टोकन हमेशा लौटाए जाते हैं।
scope access_token द्वारा दिए गए एक्सेस के दायरे को स्पेस-सीमांकित, केस-सेंसिटिव स्ट्रिंग्स की सूची के रूप में व्यक्त किया जाता है।
token_type टोकन का प्रकार वापस आ गया। इस समय, इस फ़ील्ड का मान हमेशा Bearer पर सेट होता है।

निम्नलिखित स्निपेट एक नमूना प्रतिक्रिया दिखाता है:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Google API को कॉल करना

आपके एप्लिकेशन को एक एक्सेस टोकन प्राप्त होने के बाद, आप किसी दिए गए उपयोगकर्ता खाते की ओर से Google API को कॉल करने के लिए टोकन का उपयोग कर सकते हैं यदि API द्वारा आवश्यक एक्सेस का दायरा प्रदान किया गया है। ऐसा करने के लिए, एपीआई के अनुरोध में एक्सेस टोकन को access_token क्वेरी पैरामीटर या Authorization HTTP हेडर Bearer मान शामिल करके शामिल करें। जब संभव हो, HTTP हेडर बेहतर होता है, क्योंकि सर्वर लॉग में क्वेरी स्ट्रिंग्स दिखाई देने लगती हैं। अधिकांश मामलों में आप Google API पर अपनी कॉल सेट करने के लिए क्लाइंट लाइब्रेरी का उपयोग कर सकते हैं (उदाहरण के लिए, डिस्क फ़ाइलें API को कॉल करते समय)।

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

HTTP उदाहरण प्राप्त करें

प्राधिकरण का उपयोग करके drive.files एंडपॉइंट (ड्राइव फाइल एपीआई) के लिए एक कॉल Authorization: Bearer एचटीटीपी हेडर निम्न जैसा दिख सकता है। ध्यान दें कि आपको अपना स्वयं का एक्सेस टोकन निर्दिष्ट करने की आवश्यकता है:

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 कमांड-लाइन एप्लिकेशन के साथ इन कमांड्स का परीक्षण कर सकते हैं। यहां एक उदाहरण दिया गया है जो HTTP शीर्षलेख विकल्प (पसंदीदा) का उपयोग करता है:

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 के प्राधिकरण सर्वर ( https://oauth2.googleapis.com/token ) को एक HTTPS POST अनुरोध भेजता है जिसमें निम्नलिखित पैरामीटर शामिल हैं:

खेत
client_id API Consoleसे प्राप्त क्लाइंट आईडी।
client_secret क्लाइंट सीक्रेट API Consoleसे प्राप्त किया गया। ( client_secret एंड्रॉइड, आईओएस या क्रोम एप्लिकेशन के रूप में पंजीकृत क्लाइंट के अनुरोधों पर लागू नहीं होता है।)
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"
}

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

एक टोकन रद्द करना

कुछ मामलों में एक उपयोगकर्ता किसी एप्लिकेशन को दी गई पहुंच को रद्द करना चाह सकता है। एक उपयोगकर्ता खाता सेटिंग पर जाकर पहुंच को निरस्त कर सकता है। अधिक जानकारी के लिए अपने खाते के समर्थन दस्तावेज़ तक पहुंच वाले तृतीय-पक्ष साइटों और ऐप्स का साइट या ऐप एक्सेस निकालें अनुभाग देखें।

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

किसी टोकन को प्रोग्रामेटिक रूप से निरस्त करने के लिए, आपका आवेदन https://oauth2.googleapis.com/revoke पर एक अनुरोध करता है और इसमें एक पैरामीटर के रूप में टोकन शामिल होता है:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

टोकन एक एक्सेस टोकन या रीफ्रेश टोकन हो सकता है। यदि टोकन एक एक्सेस टोकन है और उसके पास संबंधित रीफ्रेश टोकन है, तो रीफ्रेश टोकन भी निरस्त कर दिया जाएगा।

यदि निरसन को सफलतापूर्वक संसाधित किया जाता है, तो प्रतिक्रिया का HTTP स्थिति कोड 200 है। त्रुटि स्थितियों के लिए, एक HTTP स्थिति कोड 400 एक त्रुटि कोड के साथ दिया जाता है।

अग्रिम पठन

नेटिव ऐप्स के लिए IETF बेस्ट करंट प्रैक्टिस OAuth 2.0 यहां प्रलेखित कई सर्वोत्तम प्रथाओं को स्थापित करता है।