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

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

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

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

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

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

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

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

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

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

उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल पाना

जब कोई उपयोगकर्ता Google खाते से साइन इन करने का अनुरोध करता है, तो आपको OAuth 2.0 डिवाइस एंडपॉइंट, https://oauth2.googleapis.com/device/code पर एचटीटीपी पोस्ट अनुरोध भेजकर, उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल मिलता है. इसमें अपना क्लाइंट आईडी और अनुरोध के साथ ज़रूरी स्कोप की सूची शामिल करें. अगर आपको उपयोगकर्ताओं को सिर्फ़ उनके Google खातों से साइन इन करना है, तो सिर्फ़ profile और email दायरों का अनुरोध करें. इसके अलावा, अगर आपको उपयोगकर्ताओं की ओर से काम करने वाले एपीआई को कॉल करने की अनुमति चाहिए, तो 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 की वैल्यू दिखाता है. साथ ही, जब तक उपयोगकर्ता साइन इन नहीं करता या expires_in का तय किया गया समय बीत नहीं जाता, तब तक तय interval पर साइन इन एंडपॉइंट पर पोल किया जाता है.

उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल दिखाएं

डिवाइस के एंडपॉइंट से उपयोगकर्ता कोड और पुष्टि करने वाला यूआरएल मिलने के बाद, उन्हें दिखाएं और उपयोगकर्ता को यूआरएल खोलने और उपयोगकर्ता कोड डालने का निर्देश दें.

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"];

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