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

अपने 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的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
字段)是您分配的客户端ID,并且令牌尚未过期( exp
场地)。
使用email
, email_verified
和hd
字段,您可以确定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,但是此后第三方电子邮件帐户的所有权可能已更改。