उपयोगकर्ता की पुष्टि

वेब की पुष्टि करने वाले प्रोटोकॉल, एचटीटीपी सुविधाओं का इस्तेमाल करते हैं, लेकिन Chrome ऐप्लिकेशन ऐप्लिकेशन कंटेनर के अंदर चलते हैं. वे एचटीटीपी पर लोड नहीं होते और न ही रीडायरेक्ट कर सकते हैं या न ही कुकी सेट कर सकते हैं.

उपयोगकर्ताओं की पहचान की पुष्टि करने के लिए, Chrome Identity API का इस्तेमाल करें: जिन उपयोगकर्ताओं ने अपने Google खाते में लॉग इन किया है उनके लिए getAuthToken और गैर-Google खाते से लॉग इन करने वाले उपयोगकर्ताओं के लिए launchWebAuthFlow. अगर आपका ऐप्लिकेशन उपयोगकर्ताओं की पुष्टि करने के लिए अपने सर्वर का इस्तेमाल करता है, तो आपको बाद वाले वर्शन का इस्तेमाल करना होगा.

.

यह सुविधा कैसे काम करती है

Chrome ऐप्स के उपयोगकर्ताओं की प्रोफ़ाइल से एक Google खाता जुड़ा होता है. ऐप्लिकेशन getAuthToken API का इस्तेमाल करके, इन उपयोगकर्ताओं के लिए OAuth2 टोकन पा सकते हैं.

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

Google खाते की पुष्टि करना

यहां दिए गए पांच चरणों को पूरा करना होगा:

  1. अपने मेनिफ़ेस्ट में अनुमतियां जोड़ें और अपना ऐप्लिकेशन अपलोड करें.
  2. इंस्टॉल किए गए manifest.json की कुंजी को अपने सोर्स मेनिफ़ेस्ट में कॉपी करें, ताकि डेवलपमेंट के दौरान आपका ऐप्लिकेशन आईडी एक ही बना रहे.
  3. अपने Chrome ऐप्लिकेशन के लिए OAuth2 क्लाइंट आईडी पाएं.
  4. क्लाइंट आईडी और स्कोप को शामिल करने के लिए, अपना मेनिफ़ेस्ट अपडेट करें.
  5. पुष्टि करने वाला टोकन पाएं.

अनुमतियां जोड़ें और ऐप्लिकेशन अपलोड करें

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

"permissions": [
  "identity"
]

कुंजी को अपने मेनिफ़ेस्ट में कॉपी करें

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

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

  1. अपनी उपयोगकर्ता डेटा डायरेक्ट्री पर जाएं. MacOs पर उदाहरण: ~/Library/Application\ Support/Google/Chrome/Default/Extensions
  2. इंस्टॉल किए गए ऐप्लिकेशन और एक्सटेंशन की सूची बनाएं और ऐप्लिकेशन और एक्सटेंशन मैनेजमेंट पेज पर दिए गए अपने ऐप्लिकेशन आईडी का मिलान यहां एक ही आईडी से करें.
  3. इंस्टॉल की गई ऐप्लिकेशन डायरेक्ट्री पर जाएं (यह ऐप्लिकेशन आईडी का वर्शन होगा). इंस्टॉल किया गया manifest.json खोलें (pico, फ़ाइल को खोलने का सबसे आसान तरीका है).
  4. इंस्टॉल किए गए manifest.json में "कुंजी" को कॉपी करें और उसे अपने ऐप्लिकेशन की सोर्स मेनिफ़ेस्ट फ़ाइल में चिपकाएं.

अपना OAuth2 क्लाइंट आईडी पाना

क्लाइंट आईडी पाने के लिए आपको Google API (एपीआई) कंसोल में अपना ऐप्लिकेशन रजिस्टर करना होगा:

  1. Google API (एपीआई) कंसोल में उसी Google खाते से लॉगिन करें जिससे आपने Chrome Web Store पर आपका ऐप्लिकेशन अपलोड किया था.
  2. सबसे ऊपर बाएं कोने में मौजूद ड्रॉप-डाउन मेन्यू को बड़ा करके और बनाएं... मेन्यू आइटम चुनकर, एक नया प्रोजेक्ट बनाएं.
  3. नाम रखने और बनाने के बाद, "सेवाएं" नेविगेशन मेन्यू आइटम पर जाएं और अपने ऐप्लिकेशन के लिए ज़रूरी सभी Google सेवाएं चालू करें.
  4. "एपीआई ऐक्सेस" नेविगेशन मेन्यू आइटम पर जाएं और OAuth 2.0 क्लाइंट आईडी बनाएं... नीले रंग के बटन पर क्लिक करें.
  5. अनुरोध की गई ब्रैंडिंग जानकारी डालें और इंस्टॉल किए गए ऐप्लिकेशन का प्रकार चुनें.
  6. Chrome ऐप्लिकेशन चुनें और अपना ऐप्लिकेशन आईडी (ऐप्लिकेशन और एक्सटेंशन मैनेजमेंट पेज पर दिखाया गया एक ही आईडी) डालें.

अपने मेनिफ़ेस्ट को OAuth2 क्लाइंट आईडी और स्कोप की मदद से अपडेट करें

क्लाइंट आईडी और स्कोप को शामिल करने के लिए, आपको अपना मेनिफ़ेस्ट अपडेट करना होगा. यह रहा gdrive सैंपल के लिए, "oauth2" सैंपल:

"oauth2": {
    "client_id": "665859454684.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/drive"
    ]
  }

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

अब आप identity.getAuthToken को कॉल करके, पुष्टि करने वाला टोकन पाने के लिए तैयार हैं.

chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
  // Use the token.
});

उपयोगकर्ता इंटरैक्शन

getAuthToken को कॉल करते समय, आपके पास एक फ़्लैग (ऊपर दिए गए उदाहरण में 'interactive': true) को पास करने का विकल्प है. इससे यह पता चलेगा कि एपीआई को इंटरैक्टिव मोड में कॉल करना है या साइलेंट मोड में. अगर एपीआई को इंटरैक्टिव मोड में शुरू किया जाता है, तो ज़रूरत पड़ने पर उपयोगकर्ता को साइन इन और/या मंज़ूरी वाला यूज़र इंटरफ़ेस (यूआई) दिखाया जाता है, जैसा कि इस स्क्रीनशॉट में दिखाया गया है:

स्क्रीनशॉट में यूज़र इंटरफ़ेस (यूआई) की इमेज दिख रही है. इसमें यह दिखाया गया है कि कोई ऐप्लिकेशन, Google खाते की पुष्टि करने के लिए, Identity API का इस्तेमाल करता है या नहीं

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

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

कैश मेमोरी में सेव करना

Chrome में ऐक्सेस टोकन की इन-मेमोरी कैश मेमोरी होती है. इसलिए, जब भी आपको टोकन का इस्तेमाल करने की ज़रूरत हो, तो getAuthToken को कॉल किया जा सकता है. टोकन के खत्म होने की तारीख, कैश मेमोरी की मदद से अपने-आप मैनेज की जाती है.

chrome://identity-internals पर, कैश मेमोरी की मौजूदा स्थिति देखी जा सकती है.

कुछ मामलों में, उपयोगकर्ता अपना पासवर्ड बदलते हैं और ऐसे ऐक्सेस टोकन काम करना बंद कर देते हैं जिनकी समयसीमा खत्म नहीं हुई हो. टोकन का इस्तेमाल करने वाले एपीआई कॉल, एचटीटीपी स्टेटस कोड 401 के साथ दिखने लगेंगे. अगर आपको पता चलता है कि ऐसा हो गया है, तो Chrome की कैश मेमोरी से अमान्य टोकन को हटाने के लिए identity.removeCachedAuthToken पर कॉल करें.

removeCachedAuthToken के इस्तेमाल का उदाहरण:

// callback = function (error, httpStatus, responseText);
function authenticatedXhr(method, url, callback) {
  var retry = true;
  function getTokenAndXhr() {
    chrome.identity.getAuthToken({/* details */},
                                 function (access_token) {
      if (chrome.runtime.lastError) {
        callback(chrome.runtime.lastError);
        return;
      }

      var xhr = new XMLHttpRequest();
      xhr.open(method, url);
      xhr.setRequestHeader('Authorization',
                           'Bearer ' + access_token);

      xhr.onload = function () {
        if (this.status === 401 && retry) {
          // This status may indicate that the cached
          // access token was invalid. Retry once with
          // a fresh token.
          retry = false;
          chrome.identity.removeCachedAuthToken(
              { 'token': access_token },
              getTokenAndXhr);
          return;
        }

        callback(null, this.status, this.responseText);
      }
    });
  }
}

Google से बाहर के खाते की पुष्टि करना

यहां दिए गए तीन चरणों को पूरा करना होगा:

  1. सेवा देने वाली कंपनी की वेबसाइट पर रजिस्टर करें.
  2. सेवा देने वाली कंपनी के उन संसाधनों के लिए अनुमतियां जोड़ें जिन्हें आपका ऐप्लिकेशन ऐक्सेस करेगा.
  3. पुष्टि करने वाला टोकन पाएं.

सेवा देने वाली कंपनी के साथ रजिस्टर करें

आपको, सेवा देने वाली कंपनी के साथ OAuth2 क्लाइंट आईडी को रजिस्टर करना होगा. साथ ही, क्लाइंट आईडी को वेबसाइट के तौर पर कॉन्फ़िगर करना होगा. रजिस्ट्रेशन के दौरान रीडायरेक्ट यूआरआई डालने के लिए, फ़ॉर्म के यूआरएल का इस्तेमाल करें: https://<extension-id>.chromiumapp.org/<anything-here>

उदाहरण के लिए, अगर आपका ऐप्लिकेशन आईडी abcdefghijklmnopqrstuvwxyzabcdef है और आपको provider_cb को पाथ बनाना है, तो रीडायरेक्ट यूआरआई के साथ इसे अलग करने के लिए, आपको इनका इस्तेमाल करना चाहिए: https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb

सेवा देने वाली कंपनी के लिए अनुमतियां जोड़ें

सेवा देने वाले एपीआई एंडपॉइंट में क्रॉस-ऑरिजिन XHR बनाने के लिए, आपको अनुमतियों में सही पैटर्न को अनुमति देनी होगी:

"permissions": [
  ...
  "https://www.website-of-provider-with-user-photos.com/photos/*"
]

टोकन पाएं

टोकन पाने के लिए:

chrome.identity.launchWebAuthFlow(
  {'url': '<url-to-do-auth>', 'interactive': true},
  function(redirect_url) { /* Extract token from redirect_url */ });

<url-to-do-auth> वह यूआरएल है जिससे किसी वेबसाइट से, सेवा देने वाली कंपनी की पुष्टि की जाती है. उदाहरण के लिए, हमें बताएं कि आपने सेवा देने वाली किसी कंपनी के साथ OAuth2 फ़्लो किया है और आपने क्लाइंट आईडी 123456789012345 पर अपने ऐप्लिकेशन को रजिस्टर किया है और आपको सेवा देने वाली कंपनी की वेबसाइट पर, उपयोगकर्ता की फ़ोटो ऐक्सेस करनी है: https://www.website-of-provider-with-user-photos.com/dialog/oauth?client_id=123456789012345& redirect_uri=https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb&response_type=token&scope=user_photos

सेवा देने वाली कंपनी पुष्टि करेगी और अगर ज़रूरी हो, तो उपयोगकर्ता को लॉगिन और/या मंज़ूरी यूज़र इंटरफ़ेस (यूआई) दिखाएगा. इसके बाद, यह https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb#authToken=<auth-token> पर रीडायरेक्ट होगा

Chrome उसे कैप्चर कर लेगा और पूरे दूसरे वेबलिंक के साथ ऐप्लिकेशन के कॉलबैक को शुरू करेगा. ऐप्लिकेशन को टोकन को यूआरएल से बाहर निकालना चाहिए.

इंटरैक्टिव बनाम साइलेंट मोड

launchWebAuthFlow को कॉल करते समय, आप एक फ़्लैग (ऊपर दिए गए उदाहरण में 'interactive': true) पास कर सकते हैं. इससे पता चलेगा कि आपको एपीआई को इंटरैक्टिव मोड में कॉल करना है या नहीं (यानी साइलेंट मोड). अगर एपीआई को इंटरैक्टिव मोड में शुरू किया जाता है, तो टोकन पाने के लिए ज़रूरी होने पर, उपयोगकर्ता को यूज़र इंटरफ़ेस (यूआई) दिखाया जाता है. जैसे, साइन इन यूज़र इंटरफ़ेस (यूआई) और/या मंज़ूरी के लिए यूज़र इंटरफ़ेस (यूआई) या यह खास यूज़र इंटरफ़ेस (यूआई) के मामले में ऐसा होता है.

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

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