OAuth और 'Google से साइन इन करें' सुविधा का इस्तेमाल करके, आसानी से खाता लिंक करना

खास जानकारी

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

OAuth और Google से साइन इन करने की सुविधा का इस्तेमाल करके, खाता लिंक करने के लिए, यह सामान्य तरीका अपनाएं:

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

पहली इमेज. आसान तरीके से लिंक करने की सुविधा का इस्तेमाल करके, उपयोगकर्ता के फ़ोन पर खाता लिंक करना

आसान तरीके से लिंक करना: OAuth + Google से साइन इन करने की सुविधा का फ़्लो

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

User Google App / Server Your Token Exchange Endpoint Your API 1. User initiates linking 2. Request Sign in with Google 3. Sign in with Google 4. check intent (JWT Assertion) 5. account_found: true/false If account found: 6. get intent If no account: 6. create intent 7. access_token, refresh_token 8. Store user tokens 9. Access user resources
Figure 2. The sequence of events in the Streamlined Linking flow.

भूमिकाएं और ज़िम्मेदारियां

यहां दी गई टेबल में, आसान तरीके से लिंक करने की सुविधा के फ़्लो में शामिल लोगों की भूमिकाओं और ज़िम्मेदारियों के बारे में बताया गया है.

व्यक्ति / कॉम्पोनेंट जीएएल की भूमिका ज़िम्मेदारियां
Google ऐप्लिकेशन / सर्वर OAuth क्लाइंट Google से साइन इन करने की सुविधा के लिए, उपयोगकर्ता की सहमति लेता है. साथ ही, पहचान से जुड़े दावे (जेडब्लयूटी) आपके सर्वर को पास करता है और नतीजतन मिलने वाले टोकन को सुरक्षित तरीके से सेव करता है.
आपका टोकन एक्सचेंज एंडपॉइंट आइडेंटिटी प्रोवाइडर / ऑथराइज़ेशन सर्वर पहचान से जुड़े दावों की पुष्टि करता है, मौजूदा खातों की जांच करता है, खाता लिंक करने के इंटेंट (check, get, create) को मैनेज करता है, और अनुरोध किए गए इंटेंट के आधार पर टोकन जारी करता है.
आपकी सेवा का एपीआई रिसोर्स सर्वर वैलिड ऐक्सेस टोकन मिलने पर, उपयोगकर्ता के डेटा का ऐक्सेस देता है.

आसान तरीके से लिंक करने की सुविधा के लिए ज़रूरी शर्तें

  • वेब पर OAuth के ज़रिए लिंक करने की बुनियादी सुविधा लागू करें. आपकी सेवा, OAuth 2.0 के मुताबिक ऑथराइज़ेशन और टोकन एक्सचेंज एंडपॉइंट के साथ काम करनी चाहिए.
  • आपके टोकन एक्सचेंज एंडपॉइंट में, JSON वेब टोकन (जेडब्लयूटी) के दावों के साथ काम करने की सुविधा होनी चाहिए. साथ ही, इसमें check, create, और get इंटेंट लागू होने चाहिए.

अपना OAuth सर्वर लागू करना

आपके टोकन एक्सचेंज एंडपॉइंट में, check, create, और get इंटेंट के साथ काम करने की सुविधा होनी चाहिए. खाता लिंक करने की प्रोसेस पूरी करने और यह जानने के लिए कि अलग-अलग इंटेंट का इस्तेमाल कब किया जाता है, यह तरीका अपनाएं:

  1. क्या उपयोगकर्ता का खाता, आपके पुष्टि करने वाले सिस्टम में मौजूद है? (उपयोगकर्ता, 'हां' या 'नहीं' चुनकर फ़ैसला लेता है)
    1. हां : क्या उपयोगकर्ता, आपके प्लैटफ़ॉर्म पर साइन इन करने के लिए, अपने Google खाते से जुड़े ईमेल पते का इस्तेमाल करता है? (उपयोगकर्ता, 'हां' या 'नहीं' चुनकर फ़ैसला लेता है)
      1. हां : क्या उपयोगकर्ता का खाता, आपके पुष्टि करने वाले सिस्टम में मौजूद है? (check intent इसकी पुष्टि करने के लिए, कॉल किया जाता है)
        1. हां : get intent को कॉल किया जाता है. अगर get intent की प्रोसेस पूरी हो जाती है, तो खाता लिंक हो जाता है.
        2. नहीं : नया खाता बनाएं? (उपयोगकर्ता, 'हां' या 'नहीं' चुनकर फ़ैसला लेता है)
          1. हां : create intent को कॉल किया जाता है. अगर create intent की प्रोसेस पूरी हो जाती है, तो खाता लिंक हो जाता है.
          2. नहीं : वेब पर OAuth के ज़रिए लिंक करने की प्रोसेस ट्रिगर होती है. उपयोगकर्ता को उसके ब्राउज़र पर रीडायरेक्ट किया जाता है. साथ ही, उसे किसी दूसरे ईमेल पते से लिंक करने का विकल्प दिया जाता है.
      2. नहीं : वेब पर OAuth के ज़रिए लिंक करने की प्रोसेस ट्रिगर होती है. उपयोगकर्ता को उसके ब्राउज़र पर रीडायरेक्ट किया जाता है. साथ ही, उसे किसी दूसरे ईमेल पते से लिंक करने का विकल्प दिया जाता है.
    2. नहीं : क्या उपयोगकर्ता का खाता, आपके पुष्टि करने वाले सिस्टम में मौजूद है? (check intent इसकी पुष्टि करने के लिए, कॉल किया जाता है)
      1. हां : get intent को कॉल किया जाता है. अगर get intent की प्रोसेस पूरी हो जाती है, तो खाता लिंक हो जाता है.
      2. नहीं : create intent को कॉल किया जाता है. अगर create intent की प्रोसेस पूरी हो जाती है, तो खाता लिंक हो जाता है.

मौजूदा उपयोगकर्ता खाते की जांच करें (इंटेंट देखें)

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

अगर संबंधित Google खाता पहले से ही आपकी पुष्टि में मौजूद है सिस्टम, तो आपका टोकन एक्सचेंज एंडपॉइंट account_found=true के साथ जवाब देता है. अगर Google खाता किसी मौजूदा उपयोगकर्ता और आपके टोकन एक्सचेंज एंडपॉइंट से मैच नहीं करता account_found=false के साथ एचटीटीपी 404 नहीं मिला गड़बड़ी दिखाता है.

अनुरोध में यह फ़ॉर्म मौजूद है:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=check&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

यह ज़रूरी है कि आपका टोकन एक्सचेंज एंडपॉइंट इन पैरामीटर को मैनेज कर सके:

टोकन एंडपॉइंट पैरामीटर
intent इन अनुरोधों के लिए, इस पैरामीटर का मान है check.
grant_type किस टाइप के टोकन की अदला-बदली की जा रही है. इन अनुरोधों के लिए, यह पैरामीटर की वैल्यू urn:ietf:params:oauth:grant-type:jwt-bearer है.
assertion JSON Web Token (JWT), जो Google का हस्ताक्षर किया गया दावा उपलब्ध कराता है उपयोगकर्ता की पहचान होती है. JWT में ऐसी जानकारी होती है जिसमें उपयोगकर्ता Google खाता आईडी, नाम, और ईमेल पता.
client_id वह क्लाइंट आईडी जिसे आपने Google को असाइन किया है.
client_secret वह क्लाइंट सीक्रेट जिसे आपने Google को असाइन किया है.

check इंटेंट के अनुरोधों का जवाब देने के लिए, आपके टोकन एक्सचेंज एंडपॉइंट को ये चरण पूरे करने होंगे:

  • JWT के दावे की पुष्टि करें और उन्हें डिकोड करें.
  • देखें कि आपके पुष्टि करने वाले सिस्टम में Google खाता पहले से मौजूद है या नहीं.
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 खाता बनाए जाने के समय उपयोगकर्ता, हालांकि तीसरे पक्ष का मालिकाना हक शायद उसके बाद ईमेल खाता बदल गया है.

देखें कि आपके पुष्टि करने वाले सिस्टम में Google खाता पहले से मौजूद है या नहीं

देखें कि इनमें से कोई एक शर्त सही है या नहीं:

  • दावे के sub फ़ील्ड में मौजूद Google खाता आईडी, आपके उपयोगकर्ता का है डेटाबेस.
  • दावे में दिया गया ईमेल पता, आपके उपयोगकर्ता डेटाबेस के किसी उपयोगकर्ता से मेल खाता है.

अगर दोनों में से कोई भी शर्त सही है, तो इसका मतलब है कि उपयोगकर्ता ने पहले ही साइन अप कर लिया है. ऐसी स्थिति में, इस तरह से जवाब दें:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

{
  "account_found":"true",
}

अगर Google खाता आईडी और ईमेल पता, दावा आपके डेटाबेस के किसी उपयोगकर्ता से मेल खाता है, तो उपयोगकर्ता ने अभी तक साइन अप नहीं किया है. तय सीमा में इस मामले में, आपके टोकन एक्सचेंज एंडपॉइंट को एचटीटीपी 404 वाली गड़बड़ी का जवाब देना होगा जो "account_found": "false" के बारे में बताता है, जैसा कि इस उदाहरण में दिखाया गया है:

HTTP/1.1 404 Not found
Content-Type: application/json;charset=UTF-8

{
  "account_found":"false",
}

अपने-आप लिंक होने की सुविधा मैनेज करना (इंटेंट पाएं)

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

अगर इससे जुड़ा Google खाता, पुष्टि करने के लिए पहले से मौजूद है सिस्टम का इस्तेमाल करता है, तो आपका टोकन एक्सचेंज एंडपॉइंट, उपयोगकर्ता के लिए टोकन दिखाता है. अगर Google खाता किसी मौजूदा उपयोगकर्ता और आपके टोकन एक्सचेंज एंडपॉइंट से मैच नहीं करता यह linking_error गड़बड़ी और वैकल्पिक login_hint दिखाता है.

अनुरोध में यह फ़ॉर्म मौजूद है:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

यह ज़रूरी है कि आपका टोकन एक्सचेंज एंडपॉइंट इन पैरामीटर को मैनेज कर सके:

टोकन एंडपॉइंट पैरामीटर
intent इन अनुरोधों के लिए, इस पैरामीटर की वैल्यू get है.
grant_type किस टाइप के टोकन की अदला-बदली की जा रही है. इन अनुरोधों के लिए, यह पैरामीटर की वैल्यू urn:ietf:params:oauth:grant-type:jwt-bearer है.
assertion JSON Web Token (JWT), जो Google का हस्ताक्षर किया गया दावा उपलब्ध कराता है उपयोगकर्ता की पहचान होती है. JWT में ऐसी जानकारी होती है जिसमें उपयोगकर्ता Google खाता आईडी, नाम, और ईमेल पता.
scope ज़रूरी नहीं: ऐसे कोई भी दायरे जिन्हें आपने Google को, अनुरोध करने के लिए कॉन्फ़िगर किया है उपयोगकर्ता.
client_id वह क्लाइंट आईडी जिसे आपने Google को असाइन किया है.
client_secret वह क्लाइंट सीक्रेट जिसे आपने Google को असाइन किया है.

get इंटेंट के अनुरोधों का जवाब देने के लिए, आपके टोकन एक्सचेंज एंडपॉइंट को ये चरण पूरे करने होंगे:

  • JWT के दावे की पुष्टि करें और उन्हें डिकोड करें.
  • देखें कि आपके पुष्टि करने वाले सिस्टम में Google खाता पहले से मौजूद है या नहीं.
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 खाता बनाए जाने के समय उपयोगकर्ता, हालांकि तीसरे पक्ष का मालिकाना हक शायद उसके बाद ईमेल खाता बदल गया है.

देखें कि आपके पुष्टि करने वाले सिस्टम में Google खाता पहले से मौजूद है या नहीं

देखें कि इनमें से कोई एक शर्त सही है या नहीं:

  • दावे के sub फ़ील्ड में मौजूद Google खाता आईडी, आपके उपयोगकर्ता का है डेटाबेस.
  • दावे में दिया गया ईमेल पता, आपके उपयोगकर्ता डेटाबेस के किसी उपयोगकर्ता से मेल खाता है.

अगर उपयोगकर्ता का कोई खाता मिल जाता है, तो ऐक्सेस टोकन जारी करें और अपने एचटीटीपीएस रिस्पॉन्स के मुख्य हिस्से में, JSON ऑब्जेक्ट में वैल्यू दिखाएं, जैसा कि इस उदाहरण में दिखाया गया है:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",
  "refresh_token": "REFRESH_TOKEN",
  "expires_in": SECONDS_TO_EXPIRATION
}

कुछ मामलों में, हो सकता है कि आईडी टोकन के आधार पर खाता लिंक न किया जा सके. अगर यह किसी भी वजह से ऐसा करता है, तो आपके टोकन एक्सचेंज एंडपॉइंट को एचटीटीपी के साथ जवाब देना होगा 401 वाली गड़बड़ी, जो error=linking_error के बारे में बताती है, जैसा कि नीचे दिए गए उदाहरण में बताया गया है:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

जब Google को linking_error के साथ 401 वाली गड़बड़ी का जवाब मिलता है, तो Google उपयोगकर्ता को आपके ऑथराइज़ेशन एंडपॉइंट पर भेजने के लिए, पैरामीटर के तौर पर login_hint का इस्तेमाल करता है. कॉन्टेंट बनाने उपयोगकर्ता अपने ब्राउज़र में OAuth लिंक करने के फ़्लो का इस्तेमाल करके, खाता लिंक करता है.

Handle account creation using Sign in with Google (create intent)

When a user needs to create an account on your service, Google makes a request to your token exchange endpoint that specifies intent=create.

The request has the following form:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&assertion=JWT&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Your token exchange endpoint must able to handle the following parameters:

Token endpoint parameters
intent For these requests, the value of this parameter is create.
grant_type The type of token being exchanged. For these requests, this parameter has the value urn:ietf:params:oauth:grant-type:jwt-bearer.
assertion A JSON Web Token (JWT) that provides a signed assertion of the Google user's identity. The JWT contains information that includes the user's Google Account ID, name, and email address.
client_id The client ID you assigned to Google.
client_secret The client secret you assigned to Google.

The JWT within the assertion parameter contains the user's Google Account ID, name, and email address, which you can use to create a new account on your service.

To respond to the create intent requests, your token exchange endpoint must perform the following steps:

  • Validate and decode the JWT assertion.
  • Validate user information and create new account.
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 खाता बनाए जाने के समय उपयोगकर्ता, हालांकि तीसरे पक्ष का मालिकाना हक शायद उसके बाद ईमेल खाता बदल गया है.

Validate user information and create new account

Check whether either of the following conditions are true:

  • The Google Account ID, found in the assertion's sub field, is in your user database.
  • The email address in the assertion matches a user in your user database.

If either condition is true, prompt the user to link their existing account with their Google Account. To do so, respond to the request with an HTTP 401 error that specifies error=linking_error and gives the user's email address as the login_hint. The following is a sample response:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

When Google receives a 401 error response with linking_error, Google sends the user to your authorization endpoint with login_hint as a parameter. The user completes account linking using the OAuth linking flow in their browser.

If neither condition is true, create a new user account with the information provided in the JWT. New accounts don't typically have a password set. It's recommended that you add Sign in with Google to other platforms to enable users to sign in with Google across the surfaces of your application. Alternatively, you can email the user a link that starts your password recovery flow to allow the user to set a password to sign in on other platforms.

When the creation is completed, issue an access token and refresh token and return the values in a JSON object in the body of your HTTPS response, like in the following example:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",
  "refresh_token": "REFRESH_TOKEN",
  "expires_in": SECONDS_TO_EXPIRATION
}

अपना Google API क्लाइंट आईडी पाना

खाता लिंक करने के लिए रजिस्टर करने की प्रोसेस के दौरान, आपको अपना Google API क्लाइंट आईडी देना होगा. OAuth के ज़रिए लिंक करने के चरणों को पूरा करते समय बनाए गए प्रोजेक्ट का इस्तेमाल करके, अपना एपीआई क्लाइंट आईडी पाने के लिए: इसके लिए, यह तरीका अपनाएं:

  1. क्लाइंट पेज पर जाएं.
  2. Google API (एपीआई) का कोई प्रोजेक्ट बनाएं या चुनें.

    अगर आपके प्रोजेक्ट में, वेब ऐप्लिकेशन टाइप के लिए कोई क्लाइंट आईडी नहीं है, तो क्लाइंट बनाएं पर क्लिक करके एक क्लाइंट आईडी बनाएं. अनुमति वाले JavaScript ऑरिजिन बॉक्स में, अपनी साइट का डोमेन शामिल करें. स्थानीय तौर पर टेस्ट या डेवलपमेंट करते समय, आपको http://localhost और http://localhost:<port_number> दोनों को अनुमति वाले JavaScript ऑरिजिन फ़ील्ड में जोड़ना होगा.

लागू करने की पुष्टि करें

OAuth 2.0 Playground टूल का इस्तेमाल करके, लागू करने की पुष्टि की जा सकती है.

टूल में, यह तरीका अपनाएं:

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

Google खाता लिंक करने की सुविधा का डेमो टूल का इस्तेमाल करके, लागू की गई सुविधा की पुष्टि की जा सकती है.

टूल में, यह तरीका अपनाएं:

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