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

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

यह OAuth 2.0 प्रवाह निहित अनुदान प्रवाह कहा जाता है। यह उन अनुप्रयोगों के लिए डिज़ाइन किया गया है जो एपीआई तक केवल तभी पहुंचते हैं जब उपयोगकर्ता एप्लिकेशन पर मौजूद होता है। ये एप्लिकेशन गोपनीय जानकारी संग्रहीत करने में सक्षम नहीं हैं।

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

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

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

है कि गूगल एपीआई कॉल किसी भी आवेदन में उन API सक्षम करने की जरूरत है API Console।

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

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

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

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

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

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

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

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

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

चरण 1: क्लाइंट ऑब्जेक्ट को कॉन्फ़िगर करें

आप उपयोग कर रहे हैं जावास्क्रिप्ट के लिए Google API क्लाइंट लाइब्रेरी OAuth 2.0 प्रवाह को संभालने के लिए, अपना पहला कदम कॉन्फ़िगर करने के लिए है gapi.auth2 और gapi.client वस्तुओं। ये ऑब्जेक्ट आपके एप्लिकेशन को उपयोगकर्ता प्राधिकरण प्राप्त करने और अधिकृत API अनुरोध करने में सक्षम बनाते हैं।

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

जेएस क्लाइंट लाइब्रेरी

जावास्क्रिप्ट क्लाइंट लाइब्रेरी प्राधिकरण प्रक्रिया के कई पहलुओं को सरल बनाती है:

  1. यह Google के प्राधिकरण सर्वर के लिए पुनर्निर्देशित URL बनाता है और उपयोगकर्ता को उस URL पर निर्देशित करने के लिए एक विधि प्रदान करता है।
  2. यह उस सर्वर से रीडायरेक्ट को आपके एप्लिकेशन पर वापस संभालता है।
  3. यह प्राधिकरण सर्वर द्वारा लौटाए गए एक्सेस टोकन को मान्य करता है।
  4. यह एक्सेस टोकन को स्टोर करता है जिसे प्राधिकरण सर्वर आपके एप्लिकेशन को भेजता है और जब आपका ऐप बाद में अधिकृत एपीआई कॉल करता है तो उसे पुनः प्राप्त करता है।

नीचे दिए कोड स्निपेट से एक अंश है पूर्ण उदाहरण इस दस्तावेज़ में बाद में पता चला। इस कोड को initializes gapi.client वस्तु है, जो आपके आवेदन बाद में API कॉल करने का प्रयोग करेंगे। जब उस वस्तु बन जाता है, gapi.auth2 वस्तु है, जो आपके आवेदन की जाँच करें और उपयोगकर्ता के प्राधिकरण स्थिति की निगरानी करने का उपयोग करता है, यह भी आरंभ नहीं हो जाता।

करने के लिए कॉल gapi.client.init निर्दिष्ट करता है निम्नलिखित क्षेत्रों:

  • apiKey और clientId मूल्यों अपने आवेदन की प्राधिकरण प्रमाणिकता निर्दिष्ट करें। के रूप में में चर्चा बनाने प्राधिकरण प्रमाणिकता अनुभाग, इन मूल्यों में प्राप्त किया जा सकता API Console। ध्यान दें कि clientId की आवश्यकता है, तो आपके आवेदन अधिकृत API अनुरोध बनाता है। केवल अनधिकृत अनुरोध करने वाले एप्लिकेशन केवल एक API कुंजी निर्दिष्ट कर सकते हैं।
  • scope क्षेत्र के एक अंतरिक्ष-सीमांकित सूची निर्दिष्ट पहुँच scopes संसाधनों तक कि अनुरूप है कि आपके आवेदन उपयोगकर्ता की ओर से यहां पहुंच सकता है। ये मान उस सहमति स्क्रीन को सूचित करते हैं जो Google उपयोगकर्ता को प्रदर्शित करता है।

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

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

बाद gapi.client.init कॉल पूरा करता है, कोड सेट GoogleAuth गूगल प्रमाणीकरण वस्तु की पहचान करने चर। अंत में, कोड एक श्रोता सेट करता है जो उपयोगकर्ता की साइन-इन स्थिति में परिवर्तन होने पर फ़ंक्शन को कॉल करता है। (वह फ़ंक्शन स्निपेट में परिभाषित नहीं है।)

var GoogleAuth; // Google Auth object.
function initClient() {
  gapi.client.init({
      'apiKey': 'YOUR_API_KEY',
      'clientId': 'YOUR_CLIENT_ID',
      'scope': 'https://www.googleapis.com/auth/drive.metadata.readonly',
      'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest']
  }).then(function () {
      GoogleAuth = gapi.auth2.getAuthInstance();

      // Listen for sign-in state changes.
      GoogleAuth.isSignedIn.listen(updateSigninStatus);
  });
}

OAuth 2.0 समापन बिंदु

यदि आप सीधे OAuth 2.0 समापन बिंदु तक पहुंच रहे हैं, तो आप अगले चरण पर आगे बढ़ सकते हैं।

चरण 2: Google के OAuth 2.0 सर्वर पर रीडायरेक्ट करें

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

जेएस क्लाइंट लाइब्रेरी

कॉल GoogleAuth.signIn() गूगल के प्राधिकरण सर्वर से उपयोगकर्ता को विधि।

GoogleAuth.signIn();

अभ्यास में, अपने आवेदन निर्धारित करने के लिए कॉल करने के लिए है कि क्या एक बूलियन मान सेट कर सकते हैं signIn() एक API कॉल करने के लिए प्रयास करने से पहले विधि।

नीचे दिया गया कोड स्निपेट दर्शाता है कि आप उपयोगकर्ता प्राधिकरण प्रवाह कैसे आरंभ करेंगे। स्निपेट के बारे में निम्नलिखित बातों पर ध्यान दें:

  • GoogleAuth वस्तु कोड में संदर्भित वैश्विक चर में कोड स्निपेट में परिभाषित के रूप में ही है चरण 1

  • updateSigninStatus समारोह एक श्रोता उस उपयोगकर्ता के प्राधिकरण स्थिति में परिवर्तन के लिए सुनता है। : एक श्रोता के रूप में इसकी भूमिका भी चरण 1 में कोड स्निपेट में परिभाषित किया गया था
    GoogleAuth.isSignedIn.listen(updateSigninStatus);
  • स्निपेट दो अतिरिक्त वैश्विक चर परिभाषित करता है:

    • isAuthorized एक बूलियन चर बताता है कि उपयोगकर्ता पहले से प्रवेश किए जाए या नहीं। यह मान जब एप्लिकेशन के लोड होने की स्थापना की और अद्यतन किया जा सकता है, तो या ऐप्लिकेशन से उपयोगकर्ता के संकेत।

      इस स्निपेट में, sendAuthorizedApiRequest फ़ंक्शन जांच वेरिएबल का मान निर्धारित करने के लिए एप्लिकेशन एक API अनुरोध है कि ऐप्लिकेशन को अधिकृत करना प्राधिकरण या शीघ्र उपयोगकर्ता की आवश्यकता का प्रयास करना चाहिए।

    • currentApiRequest एक वस्तु है कि पिछले एपीआई अनुरोध के बारे में स्टोर जानकारी है कि उपयोगकर्ता का प्रयास किया है। वस्तु के मूल्य निर्धारित करने पर एप्लिकेशन कॉल sendAuthorizedApiRequest कार्य करते हैं।

      यदि उपयोगकर्ता ने ऐप को अधिकृत किया है, तो अनुरोध तुरंत निष्पादित किया जाता है। अन्यथा, समारोह में हस्ताक्षर करने के लिए उपयोगकर्ता पुनर्निर्देश। में उपयोगकर्ता के प्रवेश करने के बाद, updateSignInStatus फ़ंक्शन को कॉल sendAuthorizedApiRequest , एक ही अनुरोध है कि इससे पहले कि प्राधिकरण प्रवाह शुरू कर दिया प्रयास किया गया था में गुजर।

var isAuthorized;
var currentApiRequest;

/**
 * Store the request details. Then check to determine whether the user
 * has authorized the application.
 *   - If the user has granted access, make the API request.
 *   - If the user has not granted access, initiate the sign-in flow.
 */
function sendAuthorizedApiRequest(requestDetails) {
  currentApiRequest = requestDetails;
  if (isAuthorized) {
    // Make API request
    // gapi.client.request(requestDetails)

    // Reset currentApiRequest variable.
    currentApiRequest = {};
  } else {
    GoogleAuth.signIn();
  }
}

/**
 * Listener called when user completes auth flow. If the currentApiRequest
 * variable is set, then the user was prompted to authorize the application
 * before the request executed. In that case, proceed with that API request.
 */
function updateSigninStatus(isSignedIn) {
  if (isSignedIn) {
    isAuthorized = true;
    if (currentApiRequest) {
      sendAuthorizedApiRequest(currentApiRequest);
    }
  } else {
    isAuthorized = false;
  }
}

OAuth 2.0 समापन बिंदु

गूगल की OAuth 2.0 endpoint से एक्सेस का अनुरोध करने के लिए एक URL जेनरेट करें https://accounts.google.com/o/oauth2/v2/auth । यह समापन बिंदु HTTPS पर पहुँचा जा सकता है; सादे HTTP कनेक्शन अस्वीकार कर दिए गए हैं।

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

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

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

redirect_uri आवश्यक

यह निर्धारित करता है कि उपयोगकर्ता द्वारा प्राधिकरण प्रवाह पूरा करने के बाद एपीआई सर्वर उपयोगकर्ता को कहां पुनर्निर्देशित करता है। मान को उसी OAuth 2.0 क्लाइंट है, जो आप अपने ग्राहक की में विन्यस्त के लिए अधिकृत रीडायरेक्ट यूआरआई में से एक से मेल खाना चाहिए API ConsoleCredentials page। इस मान को प्रदान की के लिए एक अधिकृत रीडायरेक्ट यूआरआई मेल नहीं खाती है client_id आप एक मिल जाएगा redirect_uri_mismatch त्रुटि।

ध्यान दें कि http या https योजना, मामले, और अनुगामी में ( ' / ') सभी मेल खाना चाहिए।

response_type आवश्यक

जावास्क्रिप्ट आवेदन करने के लिए पैरामीटर का मान निर्धारित करने की आवश्यकता token । यह मान Google प्राधिकरण सर्वर का उपयोग एक के रूप में टोकन वापस जाने के लिए निर्देश देता है name=value यूआरआई (का टुकड़ा पहचानकर्ता में जोड़ी # ) जो करने के लिए उपयोगकर्ता प्राधिकरण प्रक्रिया पूरी करने के बाद पुनः निर्देशित किया गया है।

scope आवश्यक

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

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

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

state अनुशंसित

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

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

include_granted_scopes ऐच्छिक

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

login_hint ऐच्छिक

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

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

prompt ऐच्छिक

उपयोगकर्ता को प्रस्तुत करने के लिए संकेतों की एक स्थान-सीमांकित, केस-संवेदी सूची। यदि आप इस पैरामीटर को निर्दिष्ट नहीं करते हैं, तो उपयोगकर्ता को केवल पहली बार आपके प्रोजेक्ट द्वारा एक्सेस का अनुरोध करने पर संकेत दिया जाएगा। देखें उत्साह फिर से सहमति अधिक जानकारी के लिए।

संभावित मान हैं:

none कोई प्रमाणीकरण या सहमति स्क्रीन प्रदर्शित न करें। अन्य मानों के साथ निर्दिष्ट नहीं किया जाना चाहिए।
consent उपयोगकर्ता को सहमति के लिए संकेत दें।
select_account उपयोगकर्ता को एक खाता चुनने के लिए कहें।

नमूना Google के प्राधिकरण सर्वर पर पुनर्निर्देशित करें

एक उदाहरण URL नीचे दिखाया गया है, जिसमें लाइन ब्रेक और पठनीयता के लिए रिक्त स्थान हैं।

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=https%3A//oauth2.example.com/code&
 client_id=client_id

अनुरोध URL बनाने के बाद, उपयोगकर्ता को उस पर पुनर्निर्देशित करें।

जावास्क्रिप्ट नमूना कोड

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

/*
 * 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/drive.metadata.readonly',
                '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();
}

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

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

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

त्रुटियाँ

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

admin_policy_enforced

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

disallowed_useragent

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

एंड्रॉयड

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

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

आईओएस

जब में प्राधिकरण अनुरोधों खोलने आईओएस और MacOS डेवलपर्स इस त्रुटि का सामना कर सकतेWKWebView । डेवलपर्स के बजाय इस तरह के रूप आईओएस पुस्तकालयों का उपयोग करना चाहिए iOS के लिए Google साइन-इन या OpenID फाउंडेशन के iOS के लिए AppAuth

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

org_internal

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

origin_mismatch

हो सकता है कि प्राधिकरण अनुरोध की शुरुआत करने वाली JavaScript की योजना, डोमेन और/या पोर्ट OAuth क्लाइंट आईडी के लिए पंजीकृत किसी अधिकृत JavaScript मूल URI से मेल न खाए। समीक्षा में जावास्क्रिप्ट मूल अधिकृत Google API ConsoleCredentials page

redirect_uri_mismatch

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

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

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

जेएस क्लाइंट लाइब्रेरी

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

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 सर्वर प्रतिक्रिया

आप निम्न नमूना URL पर क्लिक करके इस प्रवाह का परीक्षण कर सकते हैं, जो आपकी Google डिस्क में फ़ाइलों के लिए मेटाडेटा देखने के लिए केवल-पढ़ने के लिए एक्सेस का अनुरोध करता है:

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=https%3A//oauth2.example.com/code&
 client_id=client_id

OAuth 2.0 प्रवाह पूरा करने के बाद, आप के लिए पुनः निर्देशित किया जाएगा http://localhost/oauth2callback । URL एक निकलेगा 404 NOT FOUND त्रुटि जब तक अपने स्थानीय मशीन उस पते पर एक फ़ाइल की सेवा के लिए होता है। अगला चरण यूआरआई में लौटाई गई जानकारी के बारे में अधिक विवरण प्रदान करता है जब उपयोगकर्ता को आपके आवेदन पर वापस भेज दिया जाता है।

Google API को कॉल करना

जेएस क्लाइंट लाइब्रेरी

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

क्लाइंट लाइब्रेरी API विधियों को कॉल करने के दो तरीकों का समर्थन करती है। यदि आपने एक खोज दस्तावेज़ लोड किया है, तो एपीआई आपके लिए विधि-विशिष्ट कार्यों को परिभाषित करेगा। तुम भी उपयोग कर सकते हैं gapi.client.request समारोह API पद्धति कॉल करने के लिए। निम्नलिखित दो स्निपेट डिस्क API के लिए इन विकल्पों को प्रदर्शित about.get विधि।

// Example 1: Use method-specific function
var request = gapi.client.drive.about.get({'fields': 'user'});

// Execute the API request.
request.execute(function(response) {
  console.log(response);
});


// Example 2: Use gapi.client.request(args) function
var request = gapi.client.request({
  'method': 'GET',
  'path': '/drive/v3/about',
  'params': {'fields': 'user'}
});
// Execute the API request.
request.execute(function(response) {
  console.log(response);
});

OAuth 2.0 समापन बिंदु

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

आप सभी को Google API बाहर कोशिश करते हैं और पर अपने कार्यक्षेत्रों देख सकते हैं OAuth 2.0 खेल का मैदान

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

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

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 API को अनुरोध भेजने के लिए CORS (क्रॉस-ओरिजिनल रिसोर्स शेयरिंग) का उपयोग कैसे करें। यह उदाहरण जावास्क्रिप्ट के लिए Google एपीआई क्लाइंट लाइब्रेरी का उपयोग नहीं करता है। हालांकि, भले ही आप क्लाइंट लाइब्रेरी का उपयोग नहीं कर रहे हैं, CORS का समर्थन है कि पुस्तकालय के दस्तावेज में गाइड की संभावना की मदद से आप बेहतर इन अनुरोधों को समझने के लिए।

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

var xhr = new XMLHttpRequest();
xhr.open('GET',
    'https://www.googleapis.com/drive/v3/about?fields=user&' +
    'access_token=' + params['access_token']);
xhr.onreadystatechange = function (e) {
  console.log(xhr.response);
};
xhr.send(null);

पूरा उदाहरण

जेएस क्लाइंट लाइब्रेरी

नमूना कोड डेमो

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

ध्यान दें कि यह एप्लिकेशन की पहुंच का अनुरोध https://www.googleapis.com/auth/drive.metadata.readonly गुंजाइश। एक्सेस का अनुरोध केवल यह प्रदर्शित करने के लिए किया जाता है कि किसी JavaScript एप्लिकेशन में OAuth 2.0 प्रवाह कैसे आरंभ किया जाए। यह ऐप कोई एपीआई अनुरोध नहीं करता है।

जावास्क्रिप्ट नमूना कोड

जैसा कि ऊपर दिखाया गया है, यह कोड नमूना उस पेज (एप्लिकेशन) के लिए है जो जावास्क्रिप्ट के लिए Google एपीआई क्लाइंट लाइब्रेरी लोड करता है और ओएथ 2.0 प्रवाह शुरू करता है। पृष्ठ या तो प्रदर्शित करता है:

  • एक बटन जो उपयोगकर्ता को ऐप में साइन इन करने देता है। यदि उपयोगकर्ता ने पहले ऐप को अधिकृत नहीं किया है, तो ऐप OAuth 2.0 प्रवाह लॉन्च करता है।
  • दो बटन जो उपयोगकर्ता को ऐप से साइन आउट करने या ऐप को पहले दी गई पहुंच को रद्द करने की अनुमति देते हैं। यदि आप किसी ऐप से साइन आउट करते हैं, तो आपने ऐप को दी गई एक्सेस को निरस्त नहीं किया है। ऐप द्वारा आपकी ओर से अन्य अधिकृत अनुरोध करने से पहले आपको फिर से साइन इन करना होगा, लेकिन अगली बार ऐप का उपयोग करने पर आपको फिर से एक्सेस देने की आवश्यकता नहीं होगी। हालांकि, अगर आप पहुंच निरस्त करते हैं, तो आपको फिर से पहुंच प्रदान करने की आवश्यकता है।

तुम भी के माध्यम से एप्लिकेशन की पहुंच निरस्त कर सकते हैं अनुमतियां अपने Google खाते के लिए पेज। एप्लिकेशन के रूप में गूगल एपीआई डॉक्स के लिए OAuth 2.0 डेमो में सूचीबद्ध है।

<script>
  var GoogleAuth;
  var SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly';
  function handleClientLoad() {
    // Load the API's client and auth2 modules.
    // Call the initClient function after the modules load.
    gapi.load('client:auth2', initClient);
  }

  function initClient() {
    // In practice, your app can retrieve one or more discovery documents.
    var discoveryUrl = 'https://www.googleapis.com/discovery/v1/apis/drive/v3/rest';

    // Initialize the gapi.client object, which app uses to make API requests.
    // Get API key and client ID from API Console.
    // 'scope' field specifies space-delimited list of access scopes.
    gapi.client.init({
        'apiKey': 'YOUR_API_KEY',
        'clientId': 'YOUR_CLIENT_ID',
        'discoveryDocs': [discoveryUrl],
        'scope': SCOPE
    }).then(function () {
      GoogleAuth = gapi.auth2.getAuthInstance();

      // Listen for sign-in state changes.
      GoogleAuth.isSignedIn.listen(updateSigninStatus);

      // Handle initial sign-in state. (Determine if user is already signed in.)
      var user = GoogleAuth.currentUser.get();
      setSigninStatus();

      // Call handleAuthClick function when user clicks on
      //      "Sign In/Authorize" button.
      $('#sign-in-or-out-button').click(function() {
        handleAuthClick();
      });
      $('#revoke-access-button').click(function() {
        revokeAccess();
      });
    });
  }

  function handleAuthClick() {
    if (GoogleAuth.isSignedIn.get()) {
      // User is authorized and has clicked "Sign out" button.
      GoogleAuth.signOut();
    } else {
      // User is not signed in. Start Google auth flow.
      GoogleAuth.signIn();
    }
  }

  function revokeAccess() {
    GoogleAuth.disconnect();
  }

  function setSigninStatus() {
    var user = GoogleAuth.currentUser.get();
    var isAuthorized = user.hasGrantedScopes(SCOPE);
    if (isAuthorized) {
      $('#sign-in-or-out-button').html('Sign out');
      $('#revoke-access-button').css('display', 'inline-block');
      $('#auth-status').html('You are currently signed in and have granted ' +
          'access to this app.');
    } else {
      $('#sign-in-or-out-button').html('Sign In/Authorize');
      $('#revoke-access-button').css('display', 'none');
      $('#auth-status').html('You have not authorized this app or you are ' +
          'signed out.');
    }
  }

  function updateSigninStatus() {
    setSigninStatus();
  }
</script>

<button id="sign-in-or-out-button"
        style="margin-left: 25px">Sign In/Authorize</button>
<button id="revoke-access-button"
        style="display: none; margin-left: 25px">Revoke access</button>

<div id="auth-status" style="display: inline; padding-left: 25px"></div><hr>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script async defer src="https://apis.google.com/js/api.js"
        onload="this.onload=function(){};handleClientLoad()"
        onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>

OAuth 2.0 समापन बिंदु

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

OAuth 2.0 प्रवाह के लिए, पृष्ठ इन चरणों का पालन करता है:

  1. यह गूगल के OAuth 2.0 सर्वर है, जो की पहुंच का अनुरोध करने के लिए उपयोगकर्ता निर्देशन https://www.googleapis.com/auth/drive.metadata.readonly गुंजाइश।
  2. एक या अधिक अनुरोधित क्षेत्रों तक पहुंच प्रदान करने (या अस्वीकार करने) के बाद, उपयोगकर्ता को मूल पृष्ठ पर पुनर्निर्देशित किया जाता है, जो खंड पहचानकर्ता स्ट्रिंग से एक्सेस टोकन को पार्स करता है।
  3. नमूना API अनुरोध करने के लिए पृष्ठ एक्सेस टोकन का उपयोग करता है।

    एपीआई अनुरोध ड्राइव एपीआई कॉल about.get अधिकृत उपयोगकर्ता की Google डिस्क खाते के बारे में जानकारी प्राप्त कर सके विधि।

  4. यदि अनुरोध सफलतापूर्वक निष्पादित होता है, तो ब्राउज़र के डिबगिंग कंसोल में API प्रतिक्रिया लॉग होती है।

आप के माध्यम से एप्लिकेशन की पहुंच निरस्त कर सकते हैं अनुमतियां अपने Google खाते के लिए पेज। एप्लिकेशन के रूप में गूगल एपीआई डॉक्स के लिए OAuth 2.0 डेमो सूचीबद्ध किया जाएगा।

इस कोड को स्थानीय रूप से चलाने के लिए, आप के लिए सेट मूल्यों की जरूरत है YOUR_CLIENT_ID और YOUR_REDIRECT_URI चर है कि आपके के अनुरूप प्राधिकरण प्रमाणिकताYOUR_REDIRECT_URI चर उसी यूआरएल जहां पेज की सेवा की जा रही है करने के लिए सेट किया जाना चाहिए। मान को उसी OAuth 2.0 क्लाइंट है, जो आप में विन्यस्त के लिए अधिकृत रीडायरेक्ट यूआरआई में से एक से मेल खाना चाहिए API Console Credentials page। इस मान को एक अधिकृत यूआरआई से मेल नहीं खाता, तो आप एक मिल जाएगा redirect_uri_mismatch त्रुटि। अपनी परियोजना भी है चाहिए उचित API सक्षम इस अनुरोध के लिए।

<html><head></head><body>
<script>
  var YOUR_CLIENT_ID = 'REPLACE_THIS_VALUE';
  var YOUR_REDIRECT_URI = 'REPLACE_THIS_VALUE';
  var fragmentString = location.hash.substring(1);

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

  // 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/drive/v3/about?fields=user&' +
          '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() {
    // 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/drive.metadata.readonly',
                  'state': 'try_sample_request',
                  '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>

जावास्क्रिप्ट मूल सत्यापन नियम

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

सत्यापन नियम
योजना

जावास्क्रिप्ट मूल को HTTPS योजना का उपयोग करना चाहिए, न कि सादे HTTP का। लोकलहोस्ट यूआरआई (लोकलहोस्ट आईपी एड्रेस यूआरआई सहित) इस नियम से मुक्त हैं।

मेज़बान

होस्ट कच्चे आईपी पते नहीं हो सकते। लोकलहोस्ट आईपी पतों को इस नियम से छूट दी गई है।

कार्यक्षेत्र
  • होस्ट TLD के ( शीर्ष स्तर डोमेन ) का ही होना चाहिए सार्वजनिक प्रत्यय सूची
  • होस्ट डोमेन नहीं किया जा सकता “googleusercontent.com”
  • जावास्क्रिप्ट मूल URL shortener डोमेन शामिल नहीं हो सकता (जैसे goo.gl ) जब तक एप्लिकेशन डोमेन का मालिक है।
  • उपयोगकर्ता जानकारी

    जावास्क्रिप्ट मूल में userinfo उपघटक नहीं हो सकता।

    पथ

    जावास्क्रिप्ट मूल में पथ घटक नहीं हो सकता है।

    जिज्ञासा

    जावास्क्रिप्ट मूल में क्वेरी घटक नहीं हो सकता है।

    टुकड़ा

    JavaScript मूल में फ़्रैगमेंट घटक नहीं हो सकता है।

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

    वृद्धिशील प्राधिकरण

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

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

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

    निम्नलिखित नियम वृद्धिशील प्राधिकरण से प्राप्त एक्सेस टोकन पर लागू होते हैं:

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

    नीचे दिए गए कोड नमूने दिखाते हैं कि मौजूदा एक्सेस टोकन में स्कोप कैसे जोड़ा जाता है। यह दृष्टिकोण आपके ऐप को एकाधिक एक्सेस टोकन प्रबंधित करने से बचने की अनुमति देता है।

    जेएस क्लाइंट लाइब्रेरी

    एक मौजूदा पहुँच टोकन के लिए स्कोप जोड़ने के लिए, फोन GoogleUser.grant(options) विधि। options की पहचान करता है अतिरिक्त स्कोप जो आप पहुंच प्रदान करना चाहते आपत्ति है।

    // Space-separated list of additional scope(s) you are requesting access to.
    // This code adds read-only access to the user's calendars via the Calendar API.
    var NEW_SCOPES = 'https://www.googleapis.com/auth/calendar.readonly';
    
    // Retrieve the GoogleUser object for the current user.
    var GoogleUser = GoogleAuth.currentUser.get();
    GoogleUser.grant({'scope': NEW_SCOPES});

    OAuth 2.0 समापन बिंदु

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

    निम्नलिखित कोड स्निपेट दर्शाता है कि यह कैसे करना है। स्निपेट मानता है कि आपने उन कार्यक्षेत्रों को संग्रहीत कर लिया है जिनके लिए आपका एक्सेस टोकन ब्राउज़र के स्थानीय संग्रहण में मान्य है। ( पूर्ण उदाहरण कोड भंडार स्कोप जिसके लिए पहुँच टोकन की स्थापना द्वारा मान्य है की एक सूची oauth2-test-params.scope ब्राउज़र के स्थानीय संग्रहण में संपत्ति।)

    स्निपेट उस दायरे की तुलना करता है जिसके लिए एक्सेस टोकन उस दायरे के लिए मान्य है जिसका आप किसी विशेष क्वेरी के लिए उपयोग करना चाहते हैं। यदि एक्सेस टोकन उस दायरे को कवर नहीं करता है, तो OAuth 2.0 प्रवाह प्रारंभ होता है। इधर, oauth2SignIn समारोह एक है कि में प्रदान किया गया था के रूप में ही है चरण 2 (और है कि बाद में प्रदान की जाती है पूर्ण उदाहरण )।

    var SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly';
    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.
    }

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

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

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

    जेएस क्लाइंट लाइब्रेरी

    प्रोग्राम के रूप में एक टोकन, कॉल निरस्त करने के लिए GoogleAuth.disconnect() :

    GoogleAuth.disconnect();

    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}

    The token can be an access token or a refresh token. If the token is an access token and it has a corresponding refresh token, the refresh token will also be revoked.

    If the revocation is successfully processed, then the HTTP status code of the response is 200 . For error conditions, an HTTP status code 400 is returned along with an error code.

    The following JavaScript snippet shows how to revoke a token in JavaScript without using the Google APIs Client Library for JavaScript. Since the Google's OAuth 2.0 endpoint for revoking tokens does not support Cross-origin Resource Sharing (CORS), the code creates a form and submits the form to the endpoint rather than using the XMLHttpRequest() method to post the request.

    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();
    }