उपयोगकर्ताओं को अपने Google खातों से, सीमित इनपुट सुविधाओं वाले डिवाइसों पर आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. जैसे, इंटरनेट से कनेक्ट किए गए टीवी.
ऐप्लिकेशन, उपयोगकर्ता को एक छोटा कोड और साइन इन करने का यूआरएल दिखाता है. इसके बाद, उपयोगकर्ता वेब ब्राउज़र में साइन-इन यूआरएल खोलता है, कोड डालता है, और ऐप्लिकेशन को उपयोगकर्ता की साइन-इन जानकारी ऐक्सेस करने की अनुमति देता है. आखिर में, ऐप्लिकेशन को पुष्टि मिल जाती है और उपयोगकर्ता साइन इन कर लेता है.
इस साइन इन फ़्लो का इस्तेमाल करने के लिए, ऐप्लिकेशन को ऐसे डिवाइस पर चलाना होगा जो नीचे दी गई शर्तों को पूरा करता हो:
- डिवाइस में उपयोगकर्ताओं को निर्देश देने के साथ-साथ, 40 वर्णों का यूआरएल और 15 वर्णों का उपयोगकर्ता कोड भी दिखाया जा सकता है.
- डिवाइस को इंटरनेट से कनेक्ट होना चाहिए.
क्लाइंट आईडी और क्लाइंट सीक्रेट पाएं
Google के साइन-इन एंडपॉइंट से अनुरोध करने के लिए, आपके ऐप्लिकेशन के पास OAuth 2.0 क्लाइंट आईडी और क्लाइंट सीक्रेट होना चाहिए.
अपने प्रोजेक्ट का क्लाइंट आईडी और क्लाइंट पासवर्ड ढूंढने के लिए, यह तरीका अपनाएं:
- कोई मौजूदा OAuth 2.0 क्रेडेंशियल चुनें या क्रेडेंशियल पेज खोलें.
- अगर आपने पहले से ऐसा नहीं किया है, तो क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी पर क्लिक करके और क्रेडेंशियल बनाने के लिए ज़रूरी जानकारी देकर, अपने प्रोजेक्ट का OAuth 2.0 क्रेडेंशियल बनाएं.
- OAuth 2.0 क्लाइंट आईडी सेक्शन में Client-ID देखें. ज़्यादा जानकारी के लिए, क्लाइंट आईडी पर क्लिक करें.
नया क्लाइंट आईडी बनाते समय, टीवी और सीमित इनपुट डिवाइस ऐप्लिकेशन टाइप चुनें.
उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल पाना
जब कोई उपयोगकर्ता Google खाते से साइन इन करने का अनुरोध करता है, तो OAuth 2.0 डिवाइस एंडपॉइंट https://oauth2.googleapis.com/device/code
पर एचटीटीपी पोस्ट अनुरोध भेजकर आपको एक उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल मिलता है. अनुरोध में अपना क्लाइंट आईडी और उन स्कोप की सूची शामिल करें जिनकी आपको ज़रूरत है. अगर आपको सिर्फ़ उपयोगकर्ताओं को उनके Google खातों से साइन इन कराना है, तो सिर्फ़ profile
और email
स्कोप का अनुरोध करें. इसके अलावा, अगर आपको उपयोगकर्ताओं की ओर से काम करने वाले API को कॉल करने की अनुमति का अनुरोध करना है, तो profile
और email
स्कोप के साथ-साथ ज़रूरी स्कोप का भी अनुरोध करें.
उपयोगकर्ता कोड के लिए अनुरोध का एक उदाहरण यहां दिया गया है:
POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&scope=email%20profile
curl
का इस्तेमाल करके:
curl -d "client_id=YOUR_GOOGLE_CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code
रिस्पॉन्स, JSON ऑब्जेक्ट के तौर पर दिखाया जाता है:
{
"device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
"user_code" : "GQVQ-JKEC",
"verification_url" : "https://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
आपका ऐप्लिकेशन, उपयोगकर्ता को user_code
और verification_url
वैल्यू दिखाता है. साथ ही, तय किए गए interval
पर साइन-इन एंडपॉइंट को तब तक पोल करता है, जब तक उपयोगकर्ता साइन इन नहीं कर लेता या expires_in
से तय किया गया समय बीत नहीं जाता.
उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल दिखाना
डिवाइस एंडपॉइंट से उपयोगकर्ता कोड और पुष्टि करने के लिए यूआरएल मिलने के बाद, उन्हें दिखाएं. साथ ही, उपयोगकर्ता को यूआरएल खोलने और उपयोगकर्ता कोड डालने का निर्देश दें.
verification_url
और user_code
की वैल्यू बदल सकती हैं. अपने यूज़र इंटरफ़ेस (यूआई) को इस तरह डिज़ाइन करें कि वह इन सीमाओं को मैनेज कर सके:
user_code
फ़ील्ड में इतनी चौड़ाई होनी चाहिए कि उसमेंW
के साइज़ के 15 वर्ण होने चाहिए.verification_url
को ऐसे फ़ील्ड में दिखाना ज़रूरी है जिसकी चौड़ाई इतनी चौड़ी हो कि वह 40 वर्णों वाली यूआरएल स्ट्रिंग को हैंडल कर सके.
दोनों स्ट्रिंग में, US-ASCII वर्ण सेट में से कोई भी प्रिंट किया जा सकने वाला वर्ण हो सकता है.
user_code
स्ट्रिंग दिखाते समय, उसमें किसी भी तरह का बदलाव न करें. जैसे, केस बदलना या फ़ॉर्मैटिंग के अन्य वर्ण डालना. ऐसा इसलिए, क्योंकि आने वाले समय में कोड का फ़ॉर्मैट बदलने पर, आपका ऐप्लिकेशन काम करना बंद कर सकता है.
अगर आप चाहें, तो डिसप्ले के मकसद से यूआरएल से स्कीम हटाकर, verification_url
स्ट्रिंग में बदलाव किया जा सकता है. अगर ऐसा है, तो पक्का करें कि आपका ऐप्लिकेशन "http" और "https", दोनों वैरिएंट को हैंडल कर सकता हो. verification_url
स्ट्रिंग में कोई और बदलाव न करें.
पुष्टि करने के लिए यूआरएल पर जाने पर, उपयोगकर्ता को ऐसा पेज दिखता है जो यहां दिया गया है:
उपयोगकर्ता के यूज़र कोड डालने के बाद, Google की साइन-इन साइट, इस तरह की सहमति वाली स्क्रीन दिखाती है:
अगर उपयोगकर्ता अनुमति दें पर क्लिक करता है, तो आपका ऐप्लिकेशन उपयोगकर्ता की पहचान करने के लिए आईडी टोकन, Google API को कॉल करने के लिए ऐक्सेस टोकन, और नए टोकन पाने के लिए रीफ़्रेश टोकन हासिल कर सकता है.
आईडी टोकन और रीफ़्रेश टोकन पाना
जब आपका ऐप्लिकेशन, उपयोगकर्ता कोड और पुष्टि करने का यूआरएल दिखाएगा, तब डिवाइस के एंडपॉइंट से मिले डिवाइस कोड का इस्तेमाल करके, टोकन एंडपॉइंट (https://oauth2.googleapis.com/token
) में पोल करना शुरू करें. interval
वैल्यू से तय किए गए सेकंड के इंटरवल पर, टोकन एंडपॉइंट को पोल करें.
अनुरोध का एक उदाहरण यहां दिया गया है:
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0
curl
का इस्तेमाल करके:
curl -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=YOUR_DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token
अगर उपयोगकर्ता ने अब तक अनुरोध को स्वीकार नहीं किया है, तो जवाब इस तरह दिखेगा:
{
"error" : "authorization_pending"
}
आपके ऐप्लिकेशन को इन अनुरोधों को interval
की वैल्यू से ज़्यादा बार दोहराना चाहिए. अगर आपका ऐप्लिकेशन बहुत तेज़ी से पोल करता है, तो जवाब इस तरह दिखता है:
{
"error" : "slow_down"
}
उपयोगकर्ता के साइन इन करने और आपके अनुरोध किए गए दायरों का ऐक्सेस देने के बाद, आपके ऐप्लिकेशन के अगले अनुरोध के रिस्पॉन्स में आईडी टोकन, ऐक्सेस टोकन, और रीफ़्रेश टोकन शामिल होता है:
{
"access_token": "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
"id_token": "eyJhbGciOiJSUzI..."
}
यह जवाब मिलने पर, आपका ऐप्लिकेशन साइन-इन किए हुए उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी पाने के लिए, आईडी टोकन को डिकोड कर सकता है या सर्वर से सुरक्षित रूप से प्रमाणित करने के लिए अपने ऐप्लिकेशन के बैकएंड सर्वर पर आईडी टोकन भेज सकता है. साथ ही, आपका ऐप्लिकेशन ऐक्सेस टोकन का इस्तेमाल करके, उन Google API को कॉल कर सकता है जिनके लिए उपयोगकर्ता ने अनुमति दी है.
आईडी और ऐक्सेस टोकन की समयसीमा सीमित होती है. टोकन के लाइफ़टाइम के बाद भी उपयोगकर्ता को साइन इन रखने के लिए, रीफ़्रेश टोकन सेव करें और इसका इस्तेमाल नए टोकन का अनुरोध करने के लिए करें.
आईडी टोकन से उपयोगकर्ता की प्रोफ़ाइल की जानकारी पाना
JWT-डिकोडिंग लाइब्रेरी की मदद से आईडी टोकन को डिकोड करके, साइन इन किए हुए उपयोगकर्ता की प्रोफ़ाइल की जानकारी देखी जा सकती है. उदाहरण के लिए, Auth0 की jwt-decode JavaScript लाइब्रेरी का इस्तेमाल करके:
var user_profile = jwt_decode(<var>id_token</var>);
// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];
// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];
ज़्यादा जानकारी
- उपयोगकर्ताओं को आईडी टोकन के लाइफ़टाइम के बाद भी साइन इन रखने के लिए, ऐक्सेस टोकन को रीफ़्रेश करना लेख पढ़ें.
- अगर आपको बैकएंड सर्वर से पुष्टि करनी है, तो सुरक्षित तरीके से ऐसा करने के बारे में जानने के लिए, बैकएंड सर्वर से पुष्टि करें लेख पढ़ें.