OAuth (Dialogflow) এর সাথে অ্যাকাউন্ট লিঙ্ক করা

OAuth লিঙ্কিং টাইপ দুটি ইন্ডাস্ট্রি স্ট্যান্ডার্ড OAuth 2.0 ফ্লো, অন্তর্নিহিত এবং অনুমোদন কোড প্রবাহ সমর্থন করে।

অন্তর্নিহিত কোড প্রবাহে, Google ব্যবহারকারীর ব্রাউজারে আপনার অনুমোদনের শেষ পয়েন্ট খোলে। সফল সাইন ইন করার পরে, আপনি Google-এ একটি দীর্ঘস্থায়ী অ্যাক্সেস টোকেন ফেরত দেন। এই অ্যাক্সেস টোকেনটি এখন অ্যাসিস্ট্যান্ট থেকে আপনার অ্যাকশনে পাঠানো প্রতিটি অনুরোধে অন্তর্ভুক্ত করা হয়েছে।

অনুমোদন কোড প্রবাহে, আপনার দুটি শেষ পয়েন্ট প্রয়োজন:

  • অনুমোদনের এন্ডপয়েন্ট, যেটি আপনার ব্যবহারকারীদের কাছে সাইন-ইন UI উপস্থাপন করার জন্য দায়ী যারা ইতিমধ্যে সাইন ইন করেনি এবং একটি স্বল্প-কালীন অনুমোদন কোডের আকারে অনুরোধ করা অ্যাক্সেসে সম্মতি রেকর্ড করে৷
  • টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট, যা দুই ধরনের এক্সচেঞ্জের জন্য দায়ী:
    1. একটি দীর্ঘস্থায়ী রিফ্রেশ টোকেন এবং একটি স্বল্পকালীন অ্যাক্সেস টোকেনের জন্য একটি অনুমোদন কোড বিনিময় করে৷ এই বিনিময়টি ঘটে যখন ব্যবহারকারী অ্যাকাউন্ট লিঙ্কিং প্রবাহের মধ্য দিয়ে যায়।
    2. একটি স্বল্পকালীন অ্যাক্সেস টোকেনের জন্য দীর্ঘস্থায়ী রিফ্রেশ টোকেন বিনিময় করে। এই বিনিময়টি ঘটে যখন Google এর একটি নতুন অ্যাক্সেস টোকেনের প্রয়োজন হয় কারণ এটির মেয়াদ শেষ হয়ে গেছে৷

যদিও অন্তর্নিহিত কোড ফ্লো বাস্তবায়ন করা সহজ, Google সুপারিশ করে যে অন্তর্নিহিত প্রবাহ ব্যবহার করে জারি করা অ্যাক্সেস টোকেন কখনই মেয়াদোত্তীর্ণ না হয়, কারণ অন্তর্নিহিত প্রবাহের সাথে টোকেন মেয়াদ শেষ হওয়া ব্যবহারকারীকে তাদের অ্যাকাউন্ট আবার লিঙ্ক করতে বাধ্য করে। নিরাপত্তার কারণে আপনার যদি টোকেনের মেয়াদ শেষ হওয়ার প্রয়োজন হয়, তাহলে আপনার পরিবর্তে প্রমাণীকরণ কোড প্রবাহ ব্যবহার করার বিষয়ে দৃঢ়ভাবে বিবেচনা করা উচিত।

OAuth অ্যাকাউন্ট লিঙ্কিং কার্যকর করুন

প্রকল্পটি কনফিগার করুন

OAuth অ্যাকাউন্ট লিঙ্কিং ব্যবহার করার জন্য আপনার প্রকল্প কনফিগার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যাকশন কনসোল খুলুন এবং আপনি যে প্রকল্পটি ব্যবহার করতে চান তা নির্বাচন করুন।
  2. বিকাশ ট্যাবে ক্লিক করুন এবং অ্যাকাউন্ট লিঙ্কিং নির্বাচন করুন।
  3. অ্যাকাউন্ট লিঙ্ক করার পাশের সুইচটি সক্ষম করুন।
  4. অ্যাকাউন্ট তৈরি বিভাগে, না নির্বাচন করুন, আমি শুধুমাত্র আমার ওয়েবসাইটে অ্যাকাউন্ট তৈরির অনুমতি দিতে চাই
  5. লিঙ্কিং টাইপে , OAuth এবং ইমপ্লিসিট নির্বাচন করুন।

  6. ক্লায়েন্ট তথ্যে :

    • Google থেকে আসা অনুরোধগুলি শনাক্ত করতে Google-এ আপনার অ্যাকশন দ্বারা জারি করা ক্লায়েন্ট আইডিতে একটি মান বরাদ্দ করুন।
    • আপনার অনুমোদন এবং টোকেন এক্সচেঞ্জ এন্ডপয়েন্টের জন্য URL গুলি সন্নিবেশ করুন৷
  1. সংরক্ষণ করুন ক্লিক করুন.

আপনার OAuth সার্ভার বাস্তবায়ন করুন

OAuth 2.0 অন্তর্নিহিত প্রবাহকে সমর্থন করার জন্য, আপনার পরিষেবাটি HTTPS দ্বারা একটি অনুমোদনের শেষ পয়েন্ট উপলব্ধ করে। এই শেষ পয়েন্টটি প্রমাণীকরণ এবং ডেটা অ্যাক্সেসের জন্য ব্যবহারকারীদের কাছ থেকে সম্মতি পাওয়ার জন্য দায়ী। অনুমোদনের শেষ পয়েন্ট আপনার ব্যবহারকারীদের কাছে একটি সাইন-ইন UI উপস্থাপন করে যেগুলি ইতিমধ্যে সাইন ইন করেনি এবং অনুরোধ করা অ্যাক্সেসের সম্মতি রেকর্ড করে৷

যখন আপনার অ্যাকশন আপনার পরিষেবার অনুমোদিত APIগুলির মধ্যে একটিতে কল করার প্রয়োজন হয়, তখন Google এই এন্ডপয়েন্ট ব্যবহার করে আপনার ব্যবহারকারীদের থেকে তাদের পক্ষে এই APIগুলিকে কল করার অনুমতি পেতে৷

Google দ্বারা শুরু করা একটি সাধারণ OAuth 2.0 অন্তর্নিহিত ফ্লো সেশনের নিম্নলিখিত প্রবাহ রয়েছে:

  1. Google ব্যবহারকারীর ব্রাউজারে আপনার অনুমোদনের শেষ পয়েন্ট খোলে। ব্যবহারকারী ইতিমধ্যে সাইন ইন না করলে সাইন ইন করে, এবং যদি তারা ইতিমধ্যে অনুমতি না দেয় তবে আপনার API দিয়ে তাদের ডেটা অ্যাক্সেস করার জন্য Google-কে অনুমতি দেয়।
  2. আপনার পরিষেবা একটি অ্যাক্সেস টোকেন তৈরি করে এবং অনুরোধের সাথে সংযুক্ত অ্যাক্সেস টোকেন সহ ব্যবহারকারীর ব্রাউজারটিকে Google-এ পুনঃনির্দেশ করে Google-এ ফেরত দেয়।
  3. Google আপনার পরিষেবার API কল করে এবং প্রতিটি অনুরোধের সাথে অ্যাক্সেস টোকেন সংযুক্ত করে। আপনার পরিষেবা যাচাই করে যে অ্যাক্সেস টোকেন Google-কে API অ্যাক্সেস করার অনুমোদন দেয় এবং তারপর API কলটি সম্পূর্ণ করে।

অনুমোদনের অনুরোধগুলি পরিচালনা করুন

যখন আপনার অ্যাকশনকে একটি OAuth2 অন্তর্নিহিত প্রবাহের মাধ্যমে অ্যাকাউন্ট লিঙ্ক করার প্রয়োজন হয়, তখন Google নিম্নলিখিত প্যারামিটারগুলি অন্তর্ভুক্ত করে এমন একটি অনুরোধ সহ ব্যবহারকারীকে আপনার অনুমোদনের শেষ পয়েন্টে পাঠায়:

অনুমোদনের শেষ পয়েন্ট পরামিতি
client_id আপনি Google এ যে ক্লায়েন্ট আইডি অ্যাসাইন করেছেন।
redirect_uri যে URLটিতে আপনি এই অনুরোধের প্রতিক্রিয়া পাঠান।
state পুনঃনির্দেশ URI-তে অপরিবর্তিত 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 প্যারামিটার দ্বারা নির্দিষ্ট করা URL-এর নিম্নলিখিত ফর্ম রয়েছে:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID হল অ্যাকশন কনসোলের প্রকল্প সেটিংস পৃষ্ঠায় পাওয়া আইডি।
  2. ব্যবহারকারী আপনার পরিষেবাতে সাইন ইন করেছেন কিনা তা পরীক্ষা করুন৷ ব্যবহারকারী সাইন ইন না করলে, আপনার পরিষেবার সাইন-ইন বা সাইন-আপ প্রবাহ সম্পূর্ণ করুন৷

  3. একটি অ্যাক্সেস টোকেন তৈরি করুন যা Google আপনার API অ্যাক্সেস করতে ব্যবহার করবে। অ্যাক্সেস টোকেন যেকোন স্ট্রিং মান হতে পারে, তবে এটি অবশ্যই ব্যবহারকারী এবং ক্লায়েন্টকে অনন্যভাবে উপস্থাপন করতে হবে এবং টোকেনটি অনুমানযোগ্য হতে হবে না।

  4. একটি HTTP প্রতিক্রিয়া পাঠান যা ব্যবহারকারীর ব্রাউজারকে redirect_uri প্যারামিটার দ্বারা নির্দিষ্ট URL-এ পুনঃনির্দেশিত করে। URL খণ্ডে নিম্নলিখিত সমস্ত প্যারামিটার অন্তর্ভুক্ত করুন:

    • access_token : আপনি এইমাত্র যে অ্যাক্সেস টোকেন তৈরি করেছেন
    • token_type : স্ট্রিং bearer
    • state : মূল অনুরোধ থেকে অপরিবর্তিত রাষ্ট্রের মান নিম্নোক্ত URL এর একটি উদাহরণ:
      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- এর অংশ হিসাবে আপনার অ্যাকশনের পরবর্তী কলগুলিতে টোকেনটি সংযুক্ত করবে।

প্রমাণীকরণ প্রবাহ শুরু করুন

প্রমাণীকরণ প্রবাহ শুরু করতে অ্যাকাউন্ট সাইন-ইন সহায়ক উদ্দেশ্য ব্যবহার করুন। নিম্নলিখিত কোড স্নিপেটগুলি বর্ণনা করে কিভাবে ডায়ালগফ্লো এবং অ্যাকশন SDK-এ এই সাহায্যকারী ব্যবহার করতে প্রতিক্রিয়া পাঠাতে হয়।

ডায়ালগফ্লো:

Node.js
const {dialogflow, SignIn} = require('actions-on-google');
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'));
});
জাভা
@ForIntent("Start Signin")
public ActionResponse text(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  return rb.add(new SignIn().setContext("To get your account details")).build();
}
JSON
{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "PLACEHOLDER"
            }
          }
        ]
      },
      "userStorage": "{\"data\":{}}",
      "systemIntent": {
        "intent": "actions.intent.SIGN_IN",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec",
          "optContext": "To get your account details"
        }
      }
    }
  },
  "outputContexts": [
    {
      "name": "/contexts/_actions_on_google",
      "lifespanCount": 99,
      "parameters": {
        "data": "{}"
      }
    }
  ]
}

অ্যাকশন SDK:

Node.js
const {actionssdk, SignIn} = require('actions-on-google');
const app = actionssdk({
  // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT
  clientId: CLIENT_ID,
});
// Intent that starts the account linking flow.
app.intent('actions.intent.TEXT', (conv) => {
  conv.ask(new SignIn('To get your account details'));
});
জাভা
@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();
}
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "PLACEHOLDER"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.SIGN_IN",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec",
            "optContext": "To get your account details"
          }
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

ডেটা অ্যাক্সেসের অনুরোধগুলি পরিচালনা করুন

অ্যাসিস্ট্যান্ট রিকোয়েস্টে যদি একটি অ্যাক্সেস টোকেন থাকে , তাহলে প্রথমে চেক করুন যে অ্যাক্সেস টোকেনটি বৈধ (এবং মেয়াদ শেষ হয়নি) এবং তারপর আপনার ডাটাবেস থেকে সংশ্লিষ্ট ব্যবহারকারী অ্যাকাউন্টটি পুনরুদ্ধার করুন।