चेतावनी: यह डेटा Google उपयोगकर्ता डेटा नीति के तहत प्रदान किया गया है। कृपया नीति की समीक्षा करें और उसका पालन करें। ऐसा करने में विफलता के परिणामस्वरूप परियोजना निलंबन या खाता निलंबन हो सकता है।

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

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

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

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

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

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

ज़रूरी शर्त : उपयोगकर्ता ने पहले ही आपके खाते के साथ अपना Google खाता जोड़ा है.

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

अपने Android ऐप्लिकेशन में लिंक किए गए खाते में प्रवेश करें

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

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

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

ऑथराइज़ेशन कोड सेव करने से पहले, आपको इस बात की पुष्टि करनी होगी कि आपने Google को ऐक्सेस टोकन दिया है. 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 पर सेट होना चाहिए

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

  • पुष्टि करें कि 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-पुष्टि करें: Bearer&कोटेशन; रिस्पॉन्स हेडर में पुष्टि करने का चैलेंज

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

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

पार्टनर के ऐक्सेस टोकन में#
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."
}

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

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

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

फ़ील्ड के लिए अनुरोध करें
client_id ज़रूरी है एपीआई कंसोल के क्रेडेंशियल पेज से मिला क्लाइंट आईडी. यह आम तौर पर, Google app पर नई कार्रवाइयां नाम वाला क्रेडेंशियल होगा
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 लिंक किए गए खाते के साइन इन इस्तेमाल के उदाहरण के लिए, इस फ़ील्ड की वैल्यू हमेशा ओपन आईडी पर सेट रहती है
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的JWKPEM格式的公钥来验证令牌的签名。

解码后,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场地)。

使用emailemail_verifiedhd字段,您可以确定Google是否托管电子邮件地址并对其具有权威性。如果Google具有权威性,则当前已知该用户为合法帐户所有者,您可以跳过密码或其他挑战方法。否则,可以使用这些方法在链接之前验证帐户。

Google具有权威性的情况:

  • email后缀为@gmail.com ,这是一个Gmail帐户。
  • email_verified为true并且设置了hd ,这是一个G Suite帐户。

用户可以在不使用Gmail或G Suite的情况下注册Google帐户。如果email不包含@gmail.com后缀,并且没有hd则Google并不具有权威性,建议您使用密码或其他验证方法来验证用户。当Google在创建Google帐户时最初验证了用户时, email_verfied也可能为true,但是此后第三方电子邮件帐户的所有权可能已更改。