OAuth की मदद से खाता लिंक करना

OAuth लिंकिंग टाइप, इंडस्ट्री स्टैंडर्ड के दो OAuth 2.0 फ़्लो के साथ काम करता है. ये फ़्लो हैं: इंप्लिसिट और ऑथराइज़ेशन कोड फ़्लो.

In the implicit code flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from the Assistant to your Action.

In the authorization code flow, you need two endpoints:

  • The authorization endpoint, which is responsible for presenting the sign-in UI to your users that aren't already signed in and recording consent to the requested access in the form of a short-lived authorization code.
  • The token exchange endpoint, which is responsible for two types of exchanges:
    1. Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
    2. Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.

Although the implicit code flow is simpler to implement, Google recommends that access tokens issued using the implicit flow never expire, because using token expiration with the implicit flow forces the user to link their account again. If you need token expiration for security reasons, you should strongly consider using the auth code flow instead.

OAuth खाता जोड़ने की सुविधा लागू करना

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

OAuth लिंकिंग का इस्तेमाल करने के लिए, अपने प्रोजेक्ट को कॉन्फ़िगर करने के लिए यह तरीका अपनाएं:

  1. Actions Console खोलें और वह प्रोजेक्ट चुनें जिसका आपको इस्तेमाल करना है.
  2. डेवलप करें टैब पर क्लिक करें और खाता लिंक करना चुनें.
  3. खाता लिंक करना के बगल में मौजूद स्विच को चालू करें.
  4. खाता बनाने की सुविधा सेक्शन में जाकर, नहीं, मुझे सिर्फ़ अपनी वेबसाइट पर खाता बनाने की सुविधा देनी है को चुनें.
  5. लिंक करने का टाइप में, OAuth और ऑथराइज़ेशन कोड चुनें.

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

    • Google से आने वाले अनुरोधों की पहचान करने के लिए, 'कार्रवाइयों के लिए Google की ओर से जारी किया गया क्लाइंट आईडी' एट्रिब्यूट की वैल्यू असाइन करें.
    • Google ने आपके Actions को जो क्लाइंट आईडी दिया है उसकी वैल्यू नोट करें;
    • अपने ऑथराइज़ेशन और टोकन एक्सचेंज एंडपॉइंट के लिए यूआरएल डालें.
  1. सेव करें पर क्लिक करें.

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

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

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

Google के शुरू किए गए OAuth 2.0 के ऑथराइज़ेशन कोड के फ़्लो का सेशन, इस तरह का है:

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

  3. आपकी सेवा एक ऑथराइज़ेशन कोड बनाती है और इस तरह Google को वापस भेजती है प्राधिकरण कोड के साथ उपयोगकर्ता के ब्राउज़र को Google पर वापस रीडायरेक्ट करना अनुरोध के साथ अटैच की गई है.

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

  5. उपयोगकर्ता खाता लिंक करने का फ़्लो पूरा करने के बाद, Assistant से भेजे गए अनुरोधों को पूरा करने के लिए वेबहुक को भेजे गए अनुरोध में ऐक्सेस टोकन.

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

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

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

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

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

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

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

    अगर आपकी वेबसाइट पर एक से ज़्यादा OAuth 2.0 फ़्लो काम करते हैं, तो इस बात की भी पुष्टि करें कि response_type code है.

  2. देखें कि उपयोगकर्ता ने आपकी सेवा में साइन इन किया है या नहीं. अगर उपयोगकर्ता ने साइन इन नहीं किया है, अपनी सेवा का साइन-इन या साइन-अप फ़्लो पूरा करें.

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

  4. पुष्टि करें कि redirect_uri पैरामीटर से तय किया गया यूआरएल का यह फ़ॉर्म होता है:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
    YOUR_PROJECT_ID वह आईडी है जो प्रोजेक्ट सेटिंग पेज पर मौजूद है कार्रवाइयां कंसोल पर क्लिक करें.

  5. उपयोगकर्ता के ब्राउज़र को redirect_uri पैरामीटर. वह प्राधिकरण कोड शामिल करें रीडायरेक्ट करते समय, अभी-अभी जनरेट की गई और मूल, बिना बदलाव की गई स्थिति की वैल्यू code और state पैरामीटर जोड़कर. यह एक उदाहरण है से मिलने वाले यूआरएल का इस्तेमाल करें:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

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

आपकी सेवा का टोकन एक्सचेंज एंडपॉइंट, दो तरह के टोकन के लिए ज़िम्मेदार है एक्सचेंज:

  • ऐक्सेस टोकन और रीफ़्रेश टोकन के लिए, Exchange के ऑथराइज़ेशन कोड
  • ऐक्सेस टोकन के लिए Exchange रीफ़्रेश टोकन

टोकन एक्सचेंज करने के अनुरोधों में ये पैरामीटर शामिल होते हैं:

टोकन एक्सचेंज एंडपॉइंट पैरामीटर
client_id एक ऐसी स्ट्रिंग जो अनुरोध के ऑरिजिन की पहचान Google के तौर पर करती है. इस स्ट्रिंग में उन्हें आपके सिस्टम में Google के यूनीक आइडेंटिफ़ायर के तौर पर रजिस्टर किया जाना चाहिए.
client_secret यह एक सीक्रेट स्ट्रिंग है, जिसे आपने अपनी सेवा के लिए Google के साथ रजिस्टर किया है.
grant_type किस टाइप के टोकन की अदला-बदली की जा रही है. इनमें से कोई एक authorization_code या refresh_token.
code grant_type=authorization_code होने पर, कोड Google यह ईमेल, आपके साइन-इन या टोकन एक्सचेंज एंडपॉइंट से मिला हो.
redirect_uri grant_type=authorization_code होने पर, यह पैरामीटर यूआरएल की पुष्टि के शुरुआती अनुरोध में इस्तेमाल किया गया यूआरएल.
refresh_token जब grant_type=refresh_token, रीफ़्रेश टोकन Google जो आपके टोकन एक्सचेंज एंडपॉइंट से मिला है.
ऐक्सेस टोकन और रीफ़्रेश टोकन के लिए, Exchange के ऑथराइज़ेशन कोड

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

इन अनुरोधों के लिए, grant_type का मान authorization_code है और मान code का मान, उस प्राधिकरण कोड की वैल्यू है जो आपने Google को पहले दिया था. एक उदाहरण के तौर पर, ऐक्सेस टोकन और रीफ़्रेश टोकन:

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

ऐक्सेस टोकन और रीफ़्रेश टोकन से ऑथराइज़ेशन कोड को एक्सचेंज करने के लिए, टोकन एक्सचेंज एंडपॉइंट, POST के अनुरोधों का जवाब देता है. इसके लिए, यहां दिया गया तरीका अपनाएं:

  1. पुष्टि करें कि client_id, अनुरोध के मूल की पहचान एक आधिकारिक ऑरिजिन के तौर पर करता है, और client_secret अनुमानित वैल्यू से मेल खाता हो.
  2. इनकी पुष्टि करें:
    • ऑथराइज़ेशन कोड मान्य है और उसकी समयसीमा खत्म नहीं हुई है और अनुरोध में बताया गया आईडी, ऑथराइज़ेशन कोड.
    • redirect_uri पैरामीटर से तय किया गया यूआरएल एक जैसा है में तय सीमा से ज़्यादा नहीं होना चाहिए.
  3. अगर ऊपर दी गई सभी शर्तों की पुष्टि नहीं हो पा रही है, तो एचटीटीपी दिखाएं {"error": "invalid_grant"} के मुख्य भाग के रूप में 400 गलत अनुरोध की गड़बड़ी.
  4. इसके अलावा, ऑथराइज़ेशन कोड से मिले यूज़र आईडी का इस्तेमाल करके, रीफ़्रेश करें एक टोकन और ऐक्सेस टोकन है. ये टोकन, स्ट्रिंग की कोई भी वैल्यू हो सकती हैं. हालांकि, ये ज़रूरी हैं उपयोगकर्ता और उस क्लाइंट को खास तौर पर दिखाएं जिसके लिए टोकन दिया गया है. साथ ही, उन्हें ऐसा नहीं करना चाहिए आसानी से समझा जा सकता है. ऐक्सेस टोकन के लिए, टोकन के खत्म होने की अवधि भी रिकॉर्ड करें (आम तौर पर, टोकन जारी करने के एक घंटे बाद). रीफ़्रेश टोकन की समयसीमा खत्म नहीं होती.
  5. एचटीटीपीएस रिस्पॉन्स के मुख्य हिस्से में, यहां दिया गया JSON ऑब्जेक्ट दिखाएं:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }

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

ऐक्सेस टोकन के लिए Exchange रीफ़्रेश टोकन

ऐक्सेस टोकन की समयसीमा खत्म होने पर, Google आपके टोकन एक्सचेंज एंडपॉइंट पर एक अनुरोध भेजता है रीफ़्रेश टोकन को नए ऐक्सेस टोकन से एक्सचेंज करें.

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

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

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

  1. पुष्टि करें कि client_id, अनुरोध के मूल की पहचान इस तौर पर करता है Google और यह कि client_secret उम्मीद के मुताबिक है वैल्यू.
  2. पुष्टि करें कि रीफ़्रेश टोकन मान्य है और इसमें क्लाइंट आईडी बताया गया है अनुरोध, रीफ़्रेश टोकन से जुड़े क्लाइंट आईडी से मेल खाता हो.
  3. अगर ऊपर दी गई सभी शर्तों की पुष्टि नहीं हो पा रही है, तो एचटीटीपी दिखाएं {"error": "invalid_grant"} के मुख्य भाग के रूप में 400 गलत अनुरोध की गड़बड़ी.
  4. इसके अलावा, ऐक्सेस जनरेट करने के लिए रीफ़्रेश टोकन से मिले यूज़र आईडी का इस्तेमाल करें टोकन. ये टोकन, स्ट्रिंग की कोई भी वैल्यू हो सकती हैं, लेकिन ये यूनीक होनी चाहिए यह टोकन, उपयोगकर्ता और क्लाइंट के लिए है. इसलिए, इनके बारे में अनुमान लगाना मुश्किल हो. ऐक्सेस टोकन के लिए, टोकन के खत्म होने की अवधि भी रिकॉर्ड करें (आम तौर पर, टोकन जारी करने के एक घंटे बाद).
  5. एचटीटीपीएस के मुख्य हिस्से में, यहां दिया गया JSON ऑब्जेक्ट दिखाएं जवाब:
    {
    "token_type": "बियरर",
    "access_token": "ACCESS_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    } पर स्विच करने के मकसद से, हमसे संपर्क करने के लिए धन्यवाद.

पुष्टि करने के फ़्लो के लिए, वॉइस यूज़र इंटरफ़ेस डिज़ाइन करना

देखें कि उपयोगकर्ता की पुष्टि हो गई है या नहीं. इसके बाद, खाता लिंक करने का फ़्लो शुरू करें

  1. Actions Console में अपना Actions Builder प्रोजेक्ट खोलें.
  2. अपने ऐक्शन में खाता लिंक करने की सुविधा शुरू करने के लिए, एक नया सीन बनाएं:
    1. सीन पर क्लिक करें.
    2. नया सीन जोड़ने के लिए, जोड़ें (+) आइकॉन पर क्लिक करें.
  3. नए बनाए गए सीन में, शर्तें के लिए, जोड़ें आइकॉन पर क्लिक करें.
  4. ऐसी शर्त जोड़ें जिससे यह पता चल सके कि बातचीत से जुड़ा उपयोगकर्ता, पुष्टि किया गया उपयोगकर्ता है या नहीं. अगर जांच पूरी नहीं होती है, तो बातचीत के दौरान आपकी कार्रवाई, खाता लिंक करने की सुविधा का इस्तेमाल नहीं कर सकती. साथ ही, उसे ऐसी सुविधा का ऐक्सेस देना चाहिए जिसके लिए खाता लिंक करने की ज़रूरत नहीं होती.
    1. शर्त सेक्शन में मौजूद Enter new expression फ़ील्ड में, यह लॉजिक डालें: user.verificationStatus != "VERIFIED"
    2. ट्रांज़िशन में जाकर, ऐसा सीन चुनें जिसके लिए खाते को लिंक करने की ज़रूरत न हो या ऐसा सीन चुनें जो सिर्फ़ मेहमान के तौर पर इस्तेमाल की जाने वाली सुविधा का एंट्री पॉइंट हो.

  1. शर्तें के लिए, जोड़ें आइकॉन पर क्लिक करें.
  2. अगर उपयोगकर्ता के पास कोई लिंक किया गया खाता नहीं है, तो खाता लिंक करने का फ़्लो ट्रिगर करने के लिए एक शर्त जोड़ें.
    1. शर्त में जाकर, Enter new expression फ़ील्ड में यह लॉजिक डालें:: user.verificationStatus == "VERIFIED"
    2. ट्रांज़िशन में जाकर, खाता लिंक करना सिस्टम सीन चुनें.
    3. सेव करें पर क्लिक करें.

सेव करने के बाद, आपके प्रोजेक्ट में खाता लिंक करने वाला एक नया सिस्टम सीन <SceneName>_AccountLinking जुड़ जाता है.

खाता जोड़ने के सीन को पसंद के मुताबिक बनाना

  1. सीन में जाकर, खाता लिंक करने की सुविधा वाले सिस्टम सीन को चुनें.
  2. प्रॉम्प्ट भेजें पर क्लिक करें. इसके बाद, उपयोगकर्ता को यह बताने के लिए एक छोटा वाक्य जोड़ें कि कार्रवाई को उसकी पहचान का ऐक्सेस क्यों चाहिए. उदाहरण के लिए, "आपकी प्राथमिकताओं को सेव करने के लिए".
  3. सेव करें पर क्लिक करें.

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

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

  1. शर्तें में जाकर, सिस्टम या नेटवर्क में गड़बड़ी होने पर पर क्लिक करें.
  2. कॉन्फ़िगर करें कि सिस्टम या नेटवर्क की गड़बड़ियों की वजह से, खाता लिंक करने की प्रोसेस पूरी न होने पर, फ़्लो को कैसे आगे बढ़ना चाहिए. उदाहरण के लिए, पुष्टि करने वाला मैसेज भेजें और उपयोगकर्ताओं को उन सीन पर रीडायरेक्ट करें जिनमें खाते को लिंक करने की ज़रूरत नहीं होती.
  3. सेव करें पर क्लिक करें.

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

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