वेब की पुष्टि करने वाले प्रोटोकॉल, एचटीटीपी की सुविधाओं का इस्तेमाल करते हैं. हालांकि, Chrome ऐप्लिकेशन, ऐप्लिकेशन कंटेनर में चलते हैं. ये एचटीटीपी पर लोड नहीं होते और रीडायरेक्ट नहीं कर सकते या कुकी सेट नहीं कर सकते.
उपयोगकर्ताओं की पुष्टि करने के लिए, Chrome Identity API का इस्तेमाल करें: अपने Google खाते में लॉग इन करने वाले उपयोगकर्ताओं के लिए getAuthToken
और किसी अन्य खाते में लॉग इन करने वाले उपयोगकर्ताओं के लिए launchWebAuthFlow
. अगर आपका ऐप्लिकेशन, उपयोगकर्ताओं की पुष्टि करने के लिए अपने सर्वर का इस्तेमाल करता है, तो आपको बाद वाले का इस्तेमाल करना होगा.
यह कैसे काम करता है
Chrome ऐप्लिकेशन के उपयोगकर्ताओं की प्रोफ़ाइल से कोई Google खाता जुड़ा होता है. ऐप्लिकेशन, getAuthToken
एपीआई का इस्तेमाल करके, इन उपयोगकर्ताओं के लिए OAuth2 टोकन पा सकते हैं.
जिन ऐप्लिकेशन को Google के अलावा किसी अन्य पहचान की पुष्टि करने वाली सेवा देने वाली कंपनी की मदद से पुष्टि करनी है उन्हें launchWebAuthFlow
को कॉल करना होगा. इस तरीके में, ब्राउज़र पॉप-अप का इस्तेमाल करके, सेवा देने वाले के पेज दिखाए जाते हैं. साथ ही, खास यूआरएल पैटर्न पर रीडायरेक्ट कैप्चर किए जाते हैं. रीडायरेक्ट यूआरएल, ऐप्लिकेशन को भेजे जाते हैं और ऐप्लिकेशन, यूआरएल से टोकन निकालता है.
Google खाते की पुष्टि करना
आपको ये पांच चरण पूरे करने होंगे:
- अपने मेनिफ़ेस्ट में अनुमतियां जोड़ें और अपना ऐप्लिकेशन अपलोड करें.
- इंस्टॉल किए गए
manifest.json
में मौजूद पासकोड को अपने सोर्स मेनिफ़ेस्ट में कॉपी करें, ताकि डेवलपमेंट के दौरान आपका ऐप्लिकेशन आईडी एक जैसा रहे. - अपने Chrome ऐप्लिकेशन के लिए OAuth2 क्लाइंट आईडी पाएं.
- क्लाइंट आईडी और स्कोप शामिल करने के लिए, अपना मेनिफ़ेस्ट अपडेट करें.
- पुष्टि करने वाला टोकन पाएं.
अनुमतियां जोड़ना और ऐप्लिकेशन अपलोड करना
आपको यह पक्का करना होगा कि पहचान की अनुमति आपके मेनिफ़ेस्ट में मौजूद है. इसके बाद, ऐप्लिकेशन और एक्सटेंशन मैनेजमेंट पेज पर जाकर, अपना ऐप्लिकेशन अपलोड किया जा सकता है (पब्लिश करें देखें).
"permissions": [
"identity"
]
कुंजी को अपने मेनिफ़ेस्ट में कॉपी करना
Google OAuth कंसोल में अपना ऐप्लिकेशन रजिस्टर करते समय, आपको अपने ऐप्लिकेशन का आईडी देना होगा. टोकन के अनुरोधों के दौरान इसकी जांच की जाएगी. इसलिए, ऐप्लिकेशन डेवलप करने के दौरान, एक ही ऐप्लिकेशन आईडी का इस्तेमाल करना ज़रूरी है.
अपने ऐप्लिकेशन आईडी को एक जैसा रखने के लिए, आपको इंस्टॉल किए गए manifest.json
में मौजूद पासकोड को अपने सोर्स मेनिफ़ेस्ट में कॉपी करना होगा. यह आसान काम नहीं है, लेकिन इसे करने का तरीका यहां बताया गया है:
- अपनी उपयोगकर्ता डेटा डायरेक्ट्री पर जाएं. MacOs पर उदाहरण:
~/Library/Application\ Support/Google/Chrome/Default/Extensions
- इंस्टॉल किए गए ऐप्लिकेशन और एक्सटेंशन की सूची बनाएं और ऐप्लिकेशन और एक्सटेंशन प्रबंधन पेज पर मौजूद अपनी ऐप्लिकेशन आईडी का मिलान यहां उसी आईडी से करें.
- इंस्टॉल की गई ऐप्लिकेशन डायरेक्ट्री पर जाएं. यह ऐप्लिकेशन आईडी में मौजूद वर्शन होगा. इंस्टॉल किया गया
manifest.json
खोलें (pico, फ़ाइल को तुरंत खोलने का एक तरीका है). - इंस्टॉल किए गए
manifest.json
में "key" को कॉपी करें और उसे अपने ऐप्लिकेशन की सोर्स मेनिफ़ेस्ट फ़ाइल में चिपकाएं.
अपना OAuth2 क्लाइंट आईडी पाना
क्लाइंट आईडी पाने के लिए, आपको Google API (एपीआई) कंसोल में अपना ऐप्लिकेशन रजिस्टर करना होगा:
- Google API (एपीआई) कंसोल में उसी Google खाते से लॉग इन करें जिसका इस्तेमाल करके आपने Chrome वेब स्टोर पर अपना ऐप्लिकेशन अपलोड किया था.
- सबसे ऊपर बाएं कोने में मौजूद ड्रॉप-डाउन मेन्यू को बड़ा करके, बनाएं... मेन्यू आइटम चुनकर नया प्रोजेक्ट बनाएं.
- खाता बनाने और उसे नाम देने के बाद, "सेवाएं" नेविगेशन मेन्यू आइटम पर जाएं और अपने ऐप्लिकेशन के लिए ज़रूरी Google सेवाएं चालू करें.
- "एपीआई ऐक्सेस" नेविगेशन मेन्यू आइटम पर जाएं और OAuth 2.0 क्लाइंट आईडी बनाएं... वाले नीले बटन पर क्लिक करें.
- मांगी गई ब्रैंडिंग जानकारी डालें और इंस्टॉल किया गया ऐप्लिकेशन टाइप चुनें.
- 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
) पास किया जा सकता है. इससे यह पता चलता है कि आपको एपीआई को इंटरैक्टिव मोड में कॉल करना है या साइलेंट मोड में. अगर एपीआई को इंटरैक्टिव मोड में शुरू किया जाता है, तो ज़रूरत पड़ने पर, उपयोगकर्ता को साइन इन और/या अनुमति की अनुमति वाला यूज़र इंटरफ़ेस (यूआई) दिखाया जाता है. इस स्क्रीनशॉट में, नीचे दिए गए स्क्रीनशॉट को दिखाया गया है:
अगर एपीआई को साइलेंट मोड में शुरू किया जाता है, तो एपीआई सिर्फ़ टोकन दिखाएगा. ऐसा तब होगा, जब बिना कोई यूज़र इंटरफ़ेस (यूआई) दिखाए, एक टोकन जनरेट किया जा सके. यह तब मददगार होता है, जब कोई ऐप्लिकेशन शुरू होने पर फ़्लो कर रहा हो. उदाहरण के लिए, आम तौर पर ऐसे मामलों में जहां उपयोगकर्ता का कोई जेस्चर शामिल नहीं होता.
हमारा सुझाव है कि जब कोई उपयोगकर्ता कोई कार्रवाई न कर रहा हो, तो साइलेंट मोड का इस्तेमाल करें. अगर कोई उपयोगकर्ता कोई कार्रवाई कर रहा हो, तो इंटरैक्टिव मोड का इस्तेमाल करें. उदाहरण के लिए, जब उपयोगकर्ता आपके ऐप्लिकेशन में 'साइन इन करें' बटन पर क्लिक करता है. ध्यान दें कि हम कोई भी जेस्चर ज़रूरी नहीं करते.
कैश मेमोरी में सेव करना
Chrome में ऐक्सेस टोकन के लिए, मेमोरी में सेव की गई कैश मेमोरी होती है. इसलिए, ज़रूरत पड़ने पर जब चाहें, getAuthToken
को कॉल करें. टोकन की समयसीमा खत्म होने की प्रोसेस, कैश मेमोरी में अपने-आप मैनेज होती है.
chrome://identity-internals
पर जाकर, टोकन कैश मेमोरी की मौजूदा स्थिति देखी जा सकती है.
कुछ मामलों में, ऐक्सेस टोकन का इस्तेमाल नहीं किया जा सकेगा. जैसे, जब उपयोगकर्ता अपना पासवर्ड बदलता है. टोकन का इस्तेमाल करने वाले एपीआई कॉल, एचटीटीपी स्टेटस कोड 401 के साथ दिखने लगेंगे. अगर आपको पता चलता है कि ऐसा हुआ है, तो identity.removeCachedAuthToken को कॉल करके, Chrome के कैश मेमोरी से अमान्य टोकन को हटाया जा सकता है.
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 खाता प्रमाणीकरण
आपको ये तीन चरण पूरे करने होंगे:
- सेवा देने वाली कंपनी के साथ रजिस्टर करें.
- सेवा देने वाली कंपनियों के उन संसाधनों के लिए अनुमतियां जोड़ें जिन्हें आपका ऐप्लिकेशन ऐक्सेस करेगा.
- पुष्टि करने वाला टोकन पाएं.
सेवा देने वाली कंपनी के साथ रजिस्टर करना
आपको सेवा देने वाली कंपनी के साथ एक 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
) पास किया जा सकता है. इससे यह पता चलता है कि आपको एपीआई को इंटरैक्टिव मोड में कॉल करना है या नहीं (इसे साइलेंट मोड भी कहा जाता है). एपीआई को इंटरैक्टिव मोड में शुरू करने पर, ज़रूरत पड़ने पर टोकन पाने के लिए, उपयोगकर्ता को यूज़र इंटरफ़ेस (यूआई) दिखाया जाता है. इसके लिए, साइन इन यूज़र इंटरफ़ेस (यूआई) और/या अनुमति वाले यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल किया जा सकता है. इसके अलावा, इसे सेवा देने वाली किसी कंपनी के यूज़र इंटरफ़ेस (यूआई) के लिए भी दिखाया जा सकता है.
अगर एपीआई को साइलेंट मोड में इंवोक किया जाता है, तो एपीआई सिर्फ़ तब टोकन दिखाएगा, जब सेवा देने वाली कंपनी किसी यूज़र इंटरफ़ेस को दिखाए बिना टोकन दे पाएगी. यह तब मददगार होता है, जब कोई ऐप्लिकेशन शुरू होने पर फ़्लो कर रहा हो. उदाहरण के लिए, या आम तौर पर ऐसे मामलों में जहां उपयोगकर्ता का कोई जेस्चर शामिल नहीं होता.
हमारा सुझाव है कि जब तक उपयोगकर्ता के जेस्चर का इस्तेमाल न किया जाए, तब साइलेंट मोड का इस्तेमाल करें. साथ ही, अगर हाथ का जेस्चर इस्तेमाल किया जाता है, तो इंटरैक्टिव मोड का इस्तेमाल करें. उदाहरण के लिए, अगर उपयोगकर्ता ने आपके ऐप्लिकेशन में साइन इन बटन पर क्लिक किया है, तो इंटरैक्टिव मोड का इस्तेमाल करें. ध्यान दें कि हम हाथ के जेस्चर की ज़रूरी शर्त लागू नहीं करते.