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

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

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

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

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

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

यह कैसे काम करता है

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

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

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

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

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

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

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

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

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

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 OK दिखाता है

रिस्पॉन्स का उदाहरण
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" के पुष्टि करने की चुनौती शामिल करें

पार्टनर ऐक्सेस टोकन में, Reciprocal 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 खाता बनाया गया था, हालांकि तृतीय पक्ष ईमेल खाते का स्वामित्व परिवर्तित होने के बाद हो सकता है।