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

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

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

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

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

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

ज़रूरी शर्त : आपकी सेवा में शामिल उपयोगकर्ता ने पहले ही अपने Google खाते को अपने खाते से लिंक किया हो.

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

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

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

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

Google आपके टोकन एंडपॉइंट पर एक पोस्ट अनुरोध करता है, ताकि अनुमति वाले कोड को सेव किया जा सके. कोड को उपयोगकर्ता के आईडी टोकन के बदले इस्तेमाल किया जाता है. अनुरोध में उपयोगकर्ता का ऐक्सेस टोकन और 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 'ठीक है' दिखाना

सफलता का सैंपल
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-पुष्टि: बेयरर" शामिल करें रिस्पॉन्स हेडर में ऑथेंटिक चैलेंज

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

"WWW-पुष्टि: बेयरर" शामिल करें रिस्पॉन्स हेडर में ऑथेंटिक चैलेंज

पार्टनर ऐक्सेस टोकन में, रेसिप्रोकल 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-डिकोडिंग लाइब्रेरी. इस्तेमाल की जाने वाली चीज़ें Google की सार्वजनिक कुंजियां, इनमें उपलब्ध हैं JWK या पुष्टि करने के लिए, PEM फ़ॉर्मैट टोकन का सिग्नेचर होता है.

डिकोड किए जाने पर, 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 फ़ील्ड) आपको असाइन किया गया क्लाइंट आईडी है और टोकन की समयसीमा खत्म नहीं हुई है (exp फ़ील्ड).

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

ऐसे मामले, जिनमें Google आधिकारिक जानकारी देता है:

  • email में @gmail.com सफ़िक्स लगा है. यह Gmail खाता है.
  • email_verified सही है और hd सेट है, यह एक G Suite खाता है.

उपयोगकर्ता, Gmail या G Suite का इस्तेमाल किए बिना Google खातों के लिए रजिस्टर कर सकते हैं. टास्क कब शुरू होगा email में @gmail.com सफ़िक्स नहीं है और hd मौजूद नहीं है पुष्टि करने के लिए, भरोसेमंद और पासवर्ड या अन्य चैलेंज वाले तरीकों का इस्तेमाल करने का सुझाव दिया जाता है उपयोगकर्ता है. email_verified भी सही हो सकती है, क्योंकि Google ने शुरुआत में Google खाता बनाए जाने के समय उपयोगकर्ता, हालांकि तीसरे पक्ष का मालिकाना हक शायद उसके बाद ईमेल खाता बदल गया है.