टीवी और सीमित इनपुट डिवाइसों पर साइन इन करना

उपयोगकर्ताओं को अपने Google खातों से, सीमित इनपुट सुविधाओं वाले डिवाइसों पर आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. जैसे, इंटरनेट से कनेक्ट किए गए टीवी.

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

इस साइन इन फ़्लो का इस्तेमाल करने के लिए, ऐप्लिकेशन को ऐसे डिवाइस पर चलाना होगा जो नीचे दी गई शर्तों को पूरा करता हो:

  • डिवाइस में उपयोगकर्ताओं को निर्देश देने के साथ-साथ, 40 वर्णों का यूआरएल और 15 वर्णों का उपयोगकर्ता कोड भी दिखाया जा सकता है.
  • डिवाइस को इंटरनेट से कनेक्ट होना चाहिए.

क्लाइंट आईडी और क्लाइंट सीक्रेट पाएं

Google के साइन-इन एंडपॉइंट से अनुरोध करने के लिए, आपके ऐप्लिकेशन के पास OAuth 2.0 क्लाइंट आईडी और क्लाइंट सीक्रेट होना चाहिए.

अपने प्रोजेक्ट का क्लाइंट आईडी और क्लाइंट पासवर्ड ढूंढने के लिए, यह तरीका अपनाएं:

  1. कोई मौजूदा OAuth 2.0 क्रेडेंशियल चुनें या क्रेडेंशियल पेज खोलें.
  2. अगर आपने पहले से ऐसा नहीं किया है, तो क्रेडेंशियल बनाएं > OAuth क्लाइंट आईडी पर क्लिक करके और क्रेडेंशियल बनाने के लिए ज़रूरी जानकारी देकर, अपने प्रोजेक्ट का OAuth 2.0 क्रेडेंशियल बनाएं.
  3. 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"];

ज़्यादा जानकारी