Google खाता लिंक करने की सुविधा की मदद से, Google खाता इस्तेमाल करने वाले लोग आपकी सेवाओं से तुरंत, आसानी से, और सुरक्षित तरीके से कनेक्ट हो सकते हैं. साथ ही, Google के साथ डेटा शेयर भी कर सकते हैं.
लिंक किए गए खाते में साइन-इन करने की सुविधा से, उन लोगों को Google से एक टैप से साइन इन करें सुविधा चालू हो जाती है जिन्होंने पहले से ही आपकी सेवा से अपना Google खाता लिंक कर लिया है. इससे उपयोगकर्ताओं को बेहतर अनुभव मिलता है, क्योंकि वे अपना उपयोगकर्ता नाम और पासवर्ड दोबारा डाले बिना, सिर्फ़ एक क्लिक से साइन इन कर सकते हैं. इससे आपकी सेवा पर उपयोगकर्ताओं के डुप्लीकेट खाते बनाने की संभावना भी कम हो जाती है.
ज़रूरी शर्तें
लिंक किए गए खाते में साइन-इन करने की सुविधा लागू करने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:
- आपके पास Google खाता OAuth लिंकिंग लागू करने की सुविधा है, जो OAuth 2.0 के ऑथराइज़ेशन कोड फ़्लो के साथ काम करती है. OAuth लागू करने के लिए, इनमें ये एंडपॉइंट शामिल होने चाहिए:
- ऑथराइज़ेशन एंडपॉइंट का इस्तेमाल किया जा सकता है.
- टोकन एंडपॉइंट, ऐक्सेस के अनुरोध को हैंडल करने और टोकन को रीफ़्रेश करने के लिए इस्तेमाल किया जाता है.
- userinfo एंडपॉइंट का इस्तेमाल करके, लिंक किए गए उपयोगकर्ता के बारे में खाते की बुनियादी जानकारी हासिल की जा सकती है. यह जानकारी, लिंक किए गए खाते में साइन इन करने की प्रोसेस के दौरान उपयोगकर्ता को दिखाई जाती है.
- आपके पास Android ऐप्लिकेशन है.
यह सुविधा कैसे काम करती है
पूर्वापेक्षा : उपयोगकर्ता ने आपकी सेवा पर अपने खाते के साथ पहले अपने Google खाते को लिंक किया है.
- आपने एक टैप से साइन-इन फ़्लो के दौरान, लिंक किए गए खातों को दिखाने के लिए ऑप्ट-इन किया हो.
- उपयोगकर्ता को One Tap की सुविधा से साइन इन करने का अनुरोध दिखाया जाता है. इसमें, उपयोगकर्ता को जोड़े गए खाते से आपकी सेवा में साइन इन करने का विकल्प दिखता है.
- अगर उपयोगकर्ता, जोड़े गए खाते का इस्तेमाल करना जारी रखता है, तो Google आपके टोकन एंडपॉइंट पर एक अनुरोध भेजता है. इस अनुरोध में, ऑथराइज़ेशन कोड को सेव करने की ज़रूरत होती है. अनुरोध में, आपकी सेवा से जारी किया गया उपयोगकर्ता का ऐक्सेस टोकन और Google का ऑथराइज़ेशन कोड शामिल होता है.
- आपको Google के ऑथराइज़ेशन कोड को Google आईडी टोकन से बदलना होता है. इस टोकन में, उपयोगकर्ता के Google खाते की जानकारी होती है.
- फ़्लो पूरा होने पर, आपके ऐप्लिकेशन को भी एक आईडी टोकन मिलता है. साथ ही, इस टोकन का मिलान, सर्वर को आपके ऐप्लिकेशन में साइन इन करने के लिए मिले आईडी टोकन में मौजूद उपयोगकर्ता आइडेंटिफ़ायर से किया जाता है.
अपने 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 खाता बनाया गया था, हालांकि तृतीय पक्ष ईमेल खाते का स्वामित्व परिवर्तित होने के बाद हो सकता है।