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

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

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

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

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

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

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

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

  1. कोई मौजूदा OAuth 2.0 क्रेडेंशियल चुनें या क्रेडेंशियल पेज खोलें.
  2. अगर आपने अब तक ऐसा नहीं किया है, तो क्रेडेंशियल &gt, OAuth क्लाइंट आईडी बनाएं पर क्लिक करके, अपना प्रोजेक्ट ' OAuth 2.0 क्रेडेंशियल बनाएं. साथ ही, क्रेडेंशियल बनाने के लिए ज़रूरी जानकारी दें.
  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=CLIENT_ID&scope=email%20profile

curl का इस्तेमाल करके:

curl -d "client_id=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 को ऐसे फ़ील्ड में दिखाया जाना चाहिए जिसकी चौड़ाई 15 W से ज़्यादा हो.
  • verification_url को 40 वर्णों वाली फ़ील्ड स्ट्रिंग को मैनेज करने के लिए, बड़े फ़ील्ड में दिखाया जाना चाहिए.

दोनों स्ट्रिंग में यूएस-एएससीआईआई वर्ण सेट से प्रिंट किया जा सकने वाला कोई भी वर्ण शामिल हो सकता है.

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=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

curl का इस्तेमाल करके:

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=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(id_token);

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

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