लिंक किए गए खाते में साइन इन करना

Google खाता लिंक करने की सुविधा की मदद से, Google खाता इस्तेमाल करने वाले लोग आपकी सेवाओं से तुरंत, आसानी से, और सुरक्षित तरीके से कनेक्ट हो सकते हैं. साथ ही, Google के साथ डेटा शेयर भी कर सकते हैं.

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

ज़रूरी शर्तें

लिंक किए गए खाते में साइन-इन करने की सुविधा लागू करने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:

  • आपके पास Google खाता OAuth लिंकिंग लागू करने की सुविधा है, जो OAuth 2.0 के ऑथराइज़ेशन कोड फ़्लो के साथ काम करती है. OAuth लागू करने के लिए, इनमें ये एंडपॉइंट शामिल होने चाहिए:
    • ऑथराइज़ेशन एंडपॉइंट का इस्तेमाल किया जा सकता है.
    • टोकन एंडपॉइंट, ऐक्सेस के अनुरोध को हैंडल करने और टोकन को रीफ़्रेश करने के लिए इस्तेमाल किया जाता है.
    • userinfo एंडपॉइंट का इस्तेमाल करके, लिंक किए गए उपयोगकर्ता के बारे में खाते की बुनियादी जानकारी हासिल की जा सकती है. यह जानकारी, लिंक किए गए खाते में साइन इन करने की प्रोसेस के दौरान उपयोगकर्ता को दिखाई जाती है.
  • आपके पास Android ऐप्लिकेशन है.

यह सुविधा कैसे काम करती है

पूर्वापेक्षा : उपयोगकर्ता ने आपकी सेवा पर अपने खाते के साथ पहले अपने Google खाते को लिंक किया है.

  1. आपने एक टैप से साइन-इन फ़्लो के दौरान, लिंक किए गए खातों को दिखाने के लिए ऑप्ट-इन किया हो.
  2. उपयोगकर्ता को One Tap की सुविधा से साइन इन करने का अनुरोध दिखाया जाता है. इसमें, उपयोगकर्ता को जोड़े गए खाते से आपकी सेवा में साइन इन करने का विकल्प दिखता है.
  3. अगर उपयोगकर्ता, जोड़े गए खाते का इस्तेमाल करना जारी रखता है, तो Google आपके टोकन एंडपॉइंट पर एक अनुरोध भेजता है. इस अनुरोध में, ऑथराइज़ेशन कोड को सेव करने की ज़रूरत होती है. अनुरोध में, आपकी सेवा से जारी किया गया उपयोगकर्ता का ऐक्सेस टोकन और Google का ऑथराइज़ेशन कोड शामिल होता है.
  4. आपको Google के ऑथराइज़ेशन कोड को Google आईडी टोकन से बदलना होता है. इस टोकन में, उपयोगकर्ता के Google खाते की जानकारी होती है.
  5. फ़्लो पूरा होने पर, आपके ऐप्लिकेशन को भी एक आईडी टोकन मिलता है. साथ ही, इस टोकन का मिलान, सर्वर को आपके ऐप्लिकेशन में साइन इन करने के लिए मिले आईडी टोकन में मौजूद उपयोगकर्ता आइडेंटिफ़ायर से किया जाता है.
लिंक किए गए खाते में साइन इन करना.
पहली इमेज. लिंक किए गए खाते का साइन इन फ़्लो. अगर उपयोगकर्ता ने अपने डिवाइस पर एक से ज़्यादा खातों में साइन-इन किया हुआ है, तो उसे खाता चुनने का विकल्प दिख सकता है. उसे 'लिंक किए गए खाते से साइन-इन' व्यू पर सिर्फ़ तब ही ले जाया जाता है, जब वह लिंक किया गया कोई खाता चुनता है.

अपने Android ऐप्लिकेशन में, लिंक किए गए खाते से साइन इन करने की सुविधा लागू करना

अपने Android ऐप्लिकेशन पर लिंक किए गए खाते से साइन-इन करने की सुविधा के लिए, Android लागू करने की गाइड में दिए गए निर्देशों का पालन करें.

Google से मिलने वाले ऑथराइज़ेशन कोड के अनुरोध मैनेज करना

ऑथराइज़ेशन कोड को सेव करने के लिए, Google आपके टोकन एंडपॉइंट पर एक POST अनुरोध करता है. इस कोड को उपयोगकर्ता के आईडी टोकन की जगह इस्तेमाल किया जाता है. अनुरोध में उपयोगकर्ता का ऐक्सेस टोकन और Google की ओर से जारी किया गया OAuth2 ऑथराइज़ेशन कोड शामिल होता है.

ऑथराइज़ेशन कोड को सेव करने से पहले, आपको इस बात की पुष्टि करनी होगी कि client_id ने Google को ऐक्सेस टोकन दिया था.

एचटीटीपी अनुरोध

अनुरोध का नमूना

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

यह ज़रूरी है कि आपका टोकन एक्सचेंज एंडपॉइंट इन अनुरोध पैरामीटर को मैनेज कर पाए:

टोकन एंडपॉइंट पैरामीटर
code Google OAuth2 ऑथराइज़ेशन कोड ज़रूरी है
client_id आपने Google को जो क्लाइंट आईडी जारी किया है वह ज़रूरी है
client_secret आपने Google को जो क्लाइंट सीक्रेट जारी किया है वह ज़रूरी है
access_token ज़रूरी है ऐक्सेस टोकन, जो आपने Google को जारी किया है. उपयोगकर्ता का संदर्भ पाने के लिए इसका इस्तेमाल करें
grant_type ज़रूरी है वैल्यू को urn:ietf:params:oauth:grant-type:reciprocal पर सेट करना ज़रूरी है

आपके टोकन एक्सचेंज एंडपॉइंट को पोस्ट अनुरोध का जवाब देने के लिए, यह तरीका अपनाना चाहिए:

  • पुष्टि करें कि client_id ने Google को access_token दिया था.
  • अगर अनुरोध मान्य है और पुष्टि करने वाले कोड को Google आईडी टोकन से बदल दिया गया है, तो जवाब के लिए, एचटीटीपी 200 (ठीक है) वाला रिस्पॉन्स दें. अगर अनुरोध अमान्य है, तो एचटीटीपी गड़बड़ी कोड भेजें.

एचटीटीपी रिस्पॉन्स

पुष्टि हो गई

एचटीटीपी स्टेटस कोड 200 'ठीक है' पर वापस जाएं

सैंपल के तौर पर मिला जवाब
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

गड़बड़ियां

अमान्य एचटीटीपी अनुरोध की स्थिति में, यहां दिए गए एचटीटीपी गड़बड़ी कोड में से किसी एक का इस्तेमाल करें:

एचटीटीपी स्टेटस कोड मुख्य हिस्सा ब्यौरा
400 {"error": "invalid_request"} अनुरोध में पैरामीटर मौजूद नहीं है, इसलिए सर्वर अनुरोध को पूरा नहीं कर सकता. यह तब भी दिखाया जा सकता है, जब अनुरोध में कोई ऐसा पैरामीटर शामिल हो जो काम न करता हो या किसी पैरामीटर को दोहराया जाता हो
401 {"error": "invalid_request"} क्लाइंट की पुष्टि नहीं हो सकी, जैसे कि अनुरोध में अमान्य क्लाइंट आईडी या सीक्रेट मौजूद होना
401 {"error": "invalid_token"}

रिस्पॉन्स हेडर में "WWW-Authentication: Bearer" के पुष्टि करने से जुड़ा चैलेंज शामिल करना

पार्टनर ऐक्सेस टोकन अमान्य है.
403 {"error": "insufficient_permission"}

रिस्पॉन्स हेडर में "WWW-Authentication: Bearer" के पुष्टि करने से जुड़ा चैलेंज शामिल करना

पार्टनर ऐक्सेस टोकन में, रेसिप्रोकल OAuth को लागू करने के लिए ज़रूरी स्कोप शामिल नहीं हैं
500 {"error": "internal_error"} सर्वर की गड़बड़ी

गड़बड़ी ठीक करने के तरीके में नीचे दिए गए फ़ील्ड शामिल होने चाहिए :

गड़बड़ी का जवाब देने के लिए फ़ील्ड
error ज़रूरी है गड़बड़ी की स्ट्रिंग
error_description गड़बड़ी के बारे में ऐसी जानकारी जिसे कोई भी व्यक्ति पढ़ सके
error_uri गड़बड़ी के बारे में ज़्यादा जानकारी देने वाला यूआरआई
सैंपल गड़बड़ी 400 रिस्पॉन्स
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

आईडी टोकन के लिए Exchange ऑथराइज़ेशन कोड

आपको Google आईडी टोकन के लिए मिले ऑथराइज़ेशन कोड को बदलना होगा. इस कोड में, उपयोगकर्ता के Google खाते की जानकारी होती है.

किसी Google आईडी टोकन के लिए ऑथराइज़ेशन कोड को बदलने के लिए, https://oauth2.googleapis.com/token एंडपॉइंट पर कॉल करें और नीचे दिए गए पैरामीटर सेट करें:

अनुरोध फ़ील्ड
client_id ज़रूरी है एपीआई कंसोल के क्रेडेंशियल पेज से मिला क्लाइंट आईडी. आम तौर पर, यह New Actions on Google ऐप्लिकेशन नाम वाला क्रेडेंशियल होगा
client_secret ज़रूरी है एपीआई कंसोल के क्रेडेंशियल पेज से मिला क्लाइंट सीक्रेट
code ज़रूरी है शुरुआती अनुरोध में भेजा गया ऑथराइज़ेशन कोड
grant_type ज़रूरी है जैसा कि OAuth 2.0 से जुड़ी जानकारी में बताया गया है, इस फ़ील्ड की वैल्यू authorization_code पर सेट होनी चाहिए.
अनुरोध का नमूना
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

इस अनुरोध का जवाब देने के लिए, Google एक JSON ऑब्जेक्ट दिखाता है. इस ऑब्जेक्ट में, कम समय तक इस्तेमाल किया जा सकने वाला ऐक्सेस टोकन और रीफ़्रेश टोकन होता है.

जवाब में ये फ़ील्ड शामिल होते हैं:

जवाब के फ़ील्ड
access_token Google का जारी किया गया ऐक्सेस टोकन, जिसे आपका ऐप्लिकेशन, Google API अनुरोध की अनुमति देने के लिए भेजता है
id_token आईडी टोकन में उपयोगकर्ता के Google खाते की जानकारी होती है. जवाब की पुष्टि करें सेक्शन में, आईडी टोकन के रिस्पॉन्स को डिकोड करने और उसकी पुष्टि करने का तरीका बताया जाता है
expires_in ऐक्सेस टोकन की बची हुई अवधि (सेकंड में)
refresh_token एक टोकन जिसका इस्तेमाल करके आप नया ऐक्सेस टोकन पा सकते हैं. रीफ़्रेश टोकन तब तक मान्य रहते हैं, जब तक उपयोगकर्ता ऐक्सेस रद्द नहीं कर देता
scope लिंक किए गए खाते में साइन-इन करने के इस्तेमाल के उदाहरण के लिए, इस फ़ील्ड की वैल्यू हमेशा Openid पर सेट होती है
token_type दिखाया गया टोकन किस तरह का है. इस समय, इस फ़ील्ड की वैल्यू हमेशा Bearer पर सेट रहती है
रिस्पॉन्स का उदाहरण
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

आईडी टोकन के रिस्पॉन्स की पुष्टि करें

मान्य करें और JWT अभिकथन को डिकोड करें

आप अपनी भाषा के लिए JWT- डिकोडिंग लाइब्रेरी का उपयोग करके JWT दावे को मान्य और डिकोड कर सकते हैं । टोकन के हस्ताक्षर को सत्यापित करने के लिए, JWK या PEM प्रारूपों में उपलब्ध Google की सार्वजनिक कुंजियों का उपयोग करें।

जब डिकोड किया जाता है, तो JWT अभिकथन निम्नलिखित उदाहरण की तरह दिखता है:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

टोकन के हस्ताक्षर की पुष्टि करने के अलावा, पुष्टि करें कि दावे का जारीकर्ता ( iss फ़ील्ड) https://accounts.google.com , कि ऑडियंस ( aud फ़ील्ड) आपका असाइन किया गया क्लाइंट ID है, और टोकन की समय सीमा समाप्त नहीं हुई है ( exp मैदान)।

email , email_verified और hd फ़ील्ड का उपयोग करके आप यह निर्धारित कर सकते हैं कि Google होस्ट ईमेल पते के लिए आधिकारिक है या नहीं। उन मामलों में जहां Google आधिकारिक है, उपयोगकर्ता को वर्तमान में वैध खाता स्वामी के रूप में जाना जाता है और आप पासवर्ड या अन्य चुनौतियों के तरीकों को छोड़ सकते हैं। अन्यथा, इन विधियों का उपयोग लिंक करने से पहले खाते को सत्यापित करने के लिए किया जा सकता है।

ऐसे मामले जहां Google आधिकारिक है:

  • email में @gmail.com प्रत्यय है, यह एक जीमेल खाता है।
  • email_verified सत्य है और hd सेट है, यह एक G Suite खाता है।

उपयोगकर्ता जीमेल या जी सूट का उपयोग किए बिना Google खातों के लिए पंजीकरण कर सकते हैं। जब email @gmail.com प्रत्यय नहीं होता है और hd अनुपस्थित होता है तो Google आधिकारिक नहीं होता है और उपयोगकर्ता को सत्यापित करने के लिए पासवर्ड या अन्य चुनौती विधियों की सिफारिश की जाती है। email_verfied भी सही हो सकता है क्योंकि Google ने उपयोगकर्ता को शुरू में सत्यापित किया था जब Google खाता बनाया गया था, हालांकि तृतीय पक्ष ईमेल खाते का स्वामित्व परिवर्तित होने के बाद हो सकता है।