OAuth और 'Google साइन-इन' के साथ खाता लिंक करना (Dialogflow)

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

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

पहली इमेज: आपकी सेट की गई कार्रवाई को उपयोगकर्ता की Google प्रोफ़ाइल का ऐक्सेस मिलने के बाद, इसका इस्तेमाल पुष्टि करने वाले अपने सिस्टम में उस उपयोगकर्ता से मिलती-जुलती जानकारी ढूंढने के लिए किया जा सकता है.

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

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

आवाज़ से खाता बनाने में मदद पाएं

अगर आपने बोलकर उपयोगकर्ता खाता बनाने की अनुमति दी है, तो Assistant उपयोगकर्ता से पूछती है कि उन्हें ये काम करने हैं या नहीं:

  • Google खाते की जानकारी का इस्तेमाल करके, अपने सिस्टम पर नया खाता बनाएं या
  • अगर आपके पास Google खाता नहीं है, तो किसी दूसरे खाते से पुष्टि करने वाले सिस्टम में साइन इन करें.

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

बोलकर खाता बनाने की अनुमति न दें

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

हम बनाने की अनुमति न देने का सुझाव देते हैं, अगर:

  • आपको उन उपयोगकर्ताओं को नया उपयोगकर्ता खाता बनाने की अनुमति नहीं देनी है जिनके पास Google खाते से बाहर के खाते हैं. साथ ही, आपको पुष्टि करने वाले सिस्टम में, अपने मौजूदा उपयोगकर्ता खातों को लिंक करने की अनुमति देनी है. उदाहरण के लिए, अगर आपने लॉयल्टी प्रोग्राम ऑफ़र किया है, तो शायद आप यह पक्का करना चाहें कि उपयोगकर्ता के मौजूदा खाते में मिलने वाले पॉइंट कहीं खो न जाएं.

  • आपके पास खाता बनाने के फ़्लो का पूरा कंट्रोल होना चाहिए. उदाहरण के लिए, अगर खाता बनाते समय आपको उपयोगकर्ता को अपनी सेवा की शर्तें दिखाने की ज़रूरत है, तो खाता बनाने की अनुमति न दी जा सकती है.

OAuth और 'Google साइन-इन' खाता लिंक करने की प्रोसेस लागू करना

खाते, इंडस्ट्री स्टैंडर्ड के OAuth 2.0 फ़्लो से लिंक किए जाते हैं. Actions on Google, इंप्लिसिट फ़्लो और ऑथराइज़ेशन कोड फ़्लो के साथ काम करता है.

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

ऑथराइज़ेशन कोड फ़्लो में, आपको दो एंडपॉइंट की ज़रूरत होगी:

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

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

प्रोजेक्ट कॉन्फ़िगर करें

OAuth और 'Google साइन-इन' खाता लिंक करने की सुविधा का इस्तेमाल करने के हिसाब से, अपने प्रोजेक्ट को कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:

  1. Actions कंसोल खोलें और वह प्रोजेक्ट चुनें जिसका आपको इस्तेमाल करना है.
  2. डेवलप करें टैब पर क्लिक करें और खाता लिंक करना चुनें.
  3. खाता जोड़ना के बगल में मौजूद स्विच को चालू करें.
  4. खाता बनाएं सेक्शन में, हां चुनें.

  5. लिंक करने का तरीका में, OAuth और Google साइन इन और इंप्लिसिट को चुनें.

  6. क्लाइंट की जानकारी में, ये काम करें:

    • Google से आने वाले अनुरोधों की पहचान करने के लिए, Google Actions से जारी किए गए Client-ID के लिए कोई वैल्यू असाइन करें.
    • अपने ऑथराइज़ेशन और टोकन एक्सचेंज एंडपॉइंट के यूआरएल डालें.
  7. सेव करें पर क्लिक करें.

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

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

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

Google जो सामान्य OAuth 2.0 इंप्लिसिट फ़्लो सेशन शुरू करता है उसमें यह फ़्लो होता है:

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

अनुमति के अनुरोधों को मैनेज करना

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

ऑथराइज़ेशन एंडपॉइंट पैरामीटर
client_id वह क्लाइंट आईडी जो आपने Google को असाइन किया है.
redirect_uri वह यूआरएल जिस पर इस अनुरोध का जवाब भेजा जाता है.
state हिसाब-किताब की ऐसी वैल्यू जिसे रीडायरेक्ट करने वाले यूआरआई में, Google को वापस भेजा जाता है. इसमें कोई बदलाव नहीं होता.
response_type रिस्पॉन्स में दी जाने वाली वैल्यू का टाइप. OAuth 2.0 इंप्लिसिट फ़्लो के लिए, रिस्पॉन्स का टाइप हमेशा token होता है.

उदाहरण के लिए, अगर आपका ऑथराइज़ेशन एंडपॉइंट https://myservice.example.com/auth पर उपलब्ध है, तो अनुरोध ऐसा दिख सकता है:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token

आपका ऑथराइज़ेशन एंडपॉइंट, साइन इन करने के अनुरोधों को मैनेज कर सके, इसके लिए यह तरीका अपनाएं:

  1. अनचाहे या गलत तरीके से कॉन्फ़िगर किए गए क्लाइंट ऐप्लिकेशन को ऐक्सेस देने से रोकने के लिए, client_id और redirect_uri वैल्यू की पुष्टि करें:

    • पक्का करें कि client_id, Google को असाइन किए गए आपके क्लाइंट आईडी से मेल खाता हो.
    • पक्का करें कि redirect_uri पैरामीटर से दिए गए यूआरएल का फ़ॉर्म यह है:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID, Actions Console के प्रोजेक्ट सेटिंग पेज पर मौजूद आईडी है.
  2. देखें कि उपयोगकर्ता ने आपकी सेवा में साइन इन किया हुआ है या नहीं. अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो अपनी सेवा के साइन-इन या साइन-अप फ़्लो को पूरा करें.

  3. ऐक्सेस टोकन जनरेट करें. Google इसका इस्तेमाल आपके एपीआई को ऐक्सेस करने के लिए करेगा. ऐक्सेस टोकन, किसी भी स्ट्रिंग की वैल्यू हो सकता है. हालांकि, यह खास तौर पर उस उपयोगकर्ता और क्लाइंट के बारे में बताना चाहिए जिसके लिए टोकन मौजूद है. साथ ही, इसका अंदाज़ा भी नहीं लगाया जा सकता.

  4. ऐसा एचटीटीपी रिस्पॉन्स भेजें जो उपयोगकर्ता के ब्राउज़र को redirect_uri पैरामीटर से तय किए गए यूआरएल पर रीडायरेक्ट करे. यूआरएल फ़्रैगमेंट में ये सभी पैरामीटर शामिल करें:

    • access_token: आपने अभी-अभी ऐक्सेस टोकन जनरेट किया है
    • token_type: स्ट्रिंग bearer
    • state: मूल अनुरोध की स्थिति में कोई बदलाव नहीं की गई वैल्यू यहां मिलने वाले यूआरएल का एक उदाहरण दिया गया है:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google के OAuth 2.0 रीडायरेक्ट हैंडलर को ऐक्सेस टोकन मिलेगा. साथ ही, यह पुष्टि करेगा कि state वैल्यू में कोई बदलाव नहीं हुआ है. जब Google को आपकी सेवा के लिए ऐक्सेस टोकन मिल जाता है, तब Google इस टोकन को AppRequest के हिस्से के तौर पर आपकी सेट की गई कार्रवाई के बाद के कॉल में अटैच कर देगा.

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

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

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

इस अनुरोध का फ़ॉर्म नीचे दिया गया है:

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&consent_code=CONSENT_CODE&scope=SCOPES

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

टोकन एंडपॉइंट पैरामीटर
grant_type किस तरह के टोकन का लेन-देन किया जा रहा है. इन अनुरोधों के लिए, इस पैरामीटर की वैल्यू urn:ietf:params:oauth:grant-type:jwt-bearer है.
intent इन अनुरोधों के लिए, इस पैरामीटर की वैल्यू `get` है.
assertion JSON वेब टोकन (JWT), जो Google उपयोगकर्ता की पहचान से जुड़ा हस्ताक्षर किया हुआ दावा करता है. JWT में ऐसी जानकारी होती है जिसमें उपयोगकर्ता का Google खाता आईडी, नाम, और ईमेल पता शामिल होता है.
consent_code ज़रूरी नहीं: मौजूद होने पर, एक बार इस्तेमाल होने वाला कोड, जिससे पता चलता है कि उपयोगकर्ता ने आपकी सेट की गई कार्रवाई को तय किए गए दायरों को ऐक्सेस करने की सहमति दी है.
scope ज़रूरी नहीं: ऐसा कोई भी स्कोप जिसे आपने 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
  "locale": "en_US"
}

टोकन के हस्ताक्षर की पुष्टि करने के अलावा, इस बात की पुष्टि करें कि दावे को जारी करने वाला (iss फ़ील्ड) https://accounts.google.com है और ऑडियंस (aud फ़ील्ड) वही क्लाइंट आईडी है जिसे आपकी सेट की गई कार्रवाई को असाइन किया गया है.

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

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

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

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

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

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

{
  "error":"user_not_found",
}
जब Google को user_not_found की गड़बड़ी के साथ 401 गड़बड़ी वाला रिस्पॉन्स मिलता है, तो Google आपके टोकन एक्सचेंज एंडपॉइंट को intent पैरामीटर की वैल्यू के साथ कॉल करता है. यह कॉल create पर सेट करने के बाद, एक आईडी टोकन भेजा जाता है. इस टोकन में, उपयोगकर्ता की प्रोफ़ाइल की जानकारी मौजूद होती है.

'Google साइन इन' सुविधा की मदद से खाता बनाने की प्रक्रिया को मैनेज करना

जब किसी उपयोगकर्ता को आपकी सेवा पर खाता बनाना होता है, तो Google आपके टोकन एक्सचेंज एंडपॉइंट से अनुरोध करता है, जिससे intent=create की जानकारी मिलती है. इसका उदाहरण नीचे दिया गया है:

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&consent_code=CONSENT_CODE&assertion=JWT[&NEW_ACCOUNT_INFO]

assertion पैरामीटर में एक JSON वेब टोकन (JWT) होता है. यह Google उपयोगकर्ता की पहचान के बारे में, हस्ताक्षर किया गया दावा करता है. 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
  "locale": "en_US"
}

टोकन के हस्ताक्षर की पुष्टि करने के अलावा, इस बात की पुष्टि करें कि दावे को जारी करने वाला (iss फ़ील्ड) https://accounts.google.com है और ऑडियंस (aud फ़ील्ड) वही क्लाइंट आईडी है जिसे आपकी सेट की गई कार्रवाई को असाइन किया गया है.

उपयोगकर्ता जानकारी सत्यापित करें और नया खाता बनाएं

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

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

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

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

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

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

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

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

पुष्टि करना शुरू करें

पुष्टि करने की प्रोसेस शुरू करने के लिए, खाता साइन-इन हेल्पर इंटेंट का इस्तेमाल करें.

Dialogflow (Node.js)
const app = dialogflow({
  // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
  clientId: CLIENT_ID,
})

// Intent that starts the account linking flow.
app.intent('Start Signin', conv => {
  conv.ask(new SignIn('To get your account details'))
})

Dialogflow (Java)
private String clientId = "<your_client_id>";

@ForIntent("Start Signin")
public ActionResponse text(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  return rb.add(new SignIn().setContext("To get your account details")).build();
}
ऐक्शन SDK टूल (Node.js)
const app = actionssdk({
  clientId: CLIENT_ID,
})

app.intent('Start Signin', conv => {
  conv.ask(new SignIn('To get your account details'))
})

ऐक्शन SDK टूल (Java)
private String clientId = "<your_client_id>";

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  return rb.add(new SignIn().setContext("To get your account details")).build();
}

डेटा ऐक्सेस करने के अनुरोधों को मैनेज करना

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