OAuth এবং Google দিয়ে সাইন ইন করার মাধ্যমে সুবিন্যস্ত লিঙ্কিং

সংক্ষিপ্ত বিবরণ

OAuth-ভিত্তিক সাইন ইন উইথ গুগল স্ট্রিমলাইনড লিঙ্কিং, OAuth লিঙ্কিং- এর উপরে সাইন ইন উইথ গুগল সুবিধাটি যুক্ত করে। এটি গুগল ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন লিঙ্কিং অভিজ্ঞতা প্রদান করে এবং অ্যাকাউন্ট তৈরির সুবিধাও দেয়, যার মাধ্যমে ব্যবহারকারী তার গুগল অ্যাকাউন্ট ব্যবহার করে আপনার পরিষেবাতে একটি নতুন অ্যাকাউন্ট তৈরি করতে পারেন।

OAuth এবং Sign in with Google ব্যবহার করে অ্যাকাউন্ট লিঙ্ক করার জন্য, এই সাধারণ ধাপগুলো অনুসরণ করুন:

  1. প্রথমে, ব্যবহারকারীর গুগল প্রোফাইল অ্যাক্সেস করার জন্য তার অনুমতি নিন।
  2. ব্যবহারকারীর অ্যাকাউন্টটি বিদ্যমান কিনা তা যাচাই করতে তাদের প্রোফাইলের তথ্য ব্যবহার করুন।
  3. বিদ্যমান ব্যবহারকারীদের অ্যাকাউন্টগুলো লিঙ্ক করুন।
  4. আপনার প্রমাণীকরণ সিস্টেমে গুগল ব্যবহারকারীর কোনো মিল খুঁজে না পেলে, গুগল থেকে প্রাপ্ত আইডি টোকেনটি যাচাই করুন। এরপর আপনি আইডি টোকেনে থাকা প্রোফাইল তথ্যের ভিত্তিতে একজন ব্যবহারকারী তৈরি করতে পারবেন।
এই চিত্রে দেখানো হয়েছে, একজন ব্যবহারকারী কীভাবে সরলীকৃত লিঙ্কিং প্রক্রিয়া ব্যবহার করে তার গুগল অ্যাকাউন্ট লিঙ্ক করতে পারেন। প্রথম স্ক্রিনশটটিতে দেখানো হয়েছে, কীভাবে একজন ব্যবহারকারী লিঙ্ক করার জন্য আপনার অ্যাপটি নির্বাচন করতে পারেন। দ্বিতীয় স্ক্রিনশটটিতে ব্যবহারকারী নিশ্চিত করতে পারেন যে আপনার পরিষেবাতে তার কোনো বিদ্যমান অ্যাকাউন্ট আছে কি না। তৃতীয় স্ক্রিনশটটিতে ব্যবহারকারী তার পছন্দের গুগল অ্যাকাউন্টটি নির্বাচন করতে পারেন। চতুর্থ স্ক্রিনশটটিতে আপনার অ্যাপের সাথে তার গুগল অ্যাকাউন্ট লিঙ্ক করার নিশ্চিতকরণ দেখানো হয়েছে। পঞ্চম স্ক্রিনশটটিতে গুগল অ্যাপে সফলভাবে লিঙ্ক করা একটি ব্যবহারকারী অ্যাকাউন্ট দেখানো হয়েছে।
স্ট্রিমলাইনড লিঙ্কিং ব্যবহার করে ব্যবহারকারীর ফোনে অ্যাকাউন্ট লিঙ্ক করা

চিত্র ১। স্ট্রিমলাইনড লিঙ্কিং-এর মাধ্যমে ব্যবহারকারীর ফোনে অ্যাকাউন্ট লিঙ্ক করা।

সুবিন্যস্ত সংযোগ: OAuth + Google Flow দিয়ে সাইন ইন

নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামটি স্ট্রিমলাইনড লিঙ্কিং-এর জন্য ব্যবহারকারী, গুগল এবং আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টের মধ্যকার মিথস্ক্রিয়া বিস্তারিতভাবে বর্ণনা করে।

ব্যবহারকারী গুগল অ্যাপ / সার্ভার আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট আপনার এপিআই ১. ব্যবহারকারী লিঙ্কিং শুরু করেন ২. গুগল দিয়ে সাইন ইন করার অনুরোধ করুন ৩. গুগল দিয়ে সাইন ইন করুন ৪. অভিপ্রায় যাচাই করুন (JWT অ্যাসারশন) ৫. অ্যাকাউন্ট_পাওয়া_গেছে: সত্য/মিথ্যা যদি অ্যাকাউন্ট খুঁজে পাওয়া যায়: ৬. উদ্দেশ্য জানুন যদি কোনো অ্যাকাউন্ট না থাকে: ৬. অভিপ্রায় তৈরি করুন ৭. অ্যাক্সেস_টোকেন, রিফ্রেশ_টোকেন ৮. ব্যবহারকারীর টোকেন সংরক্ষণ করুন ৯. ব্যবহারকারীর রিসোর্স অ্যাক্সেস করুন
চিত্র ২. স্ট্রিমলাইনড লিঙ্কিং ফ্লো-এর ঘটনাক্রম।

ভূমিকা ও দায়িত্ব

নিম্নলিখিত সারণিতে স্ট্রিমলাইনড লিঙ্কিং ফ্লো-তে অংশগ্রহণকারীদের ভূমিকা ও দায়িত্ব সংজ্ঞায়িত করা হয়েছে।

অভিনেতা / উপাদান GAL ভূমিকা দায়িত্বসমূহ
গুগল অ্যাপ / সার্ভার OAuth ক্লায়েন্ট গুগল দিয়ে সাইন ইন করার জন্য ব্যবহারকারীর সম্মতি গ্রহণ করে, আপনার সার্ভারে পরিচয় নিশ্চিতকরণ (JWT) পাঠায় এবং ফলস্বরূপ প্রাপ্ত টোকেনগুলো নিরাপদে সংরক্ষণ করে।
আপনার টোকেন বিনিময় এন্ডপয়েন্ট পরিচয় প্রদানকারী / অনুমোদন সার্ভার পরিচয় যাচাইকরণ, বিদ্যমান অ্যাকাউন্ট পরীক্ষা করা, অ্যাকাউন্ট লিঙ্ক করার ইনটেন্ট ( check , get , create ) পরিচালনা করা এবং অনুরোধকৃত ইনটেন্টের উপর ভিত্তি করে টোকেন ইস্যু করা হয়।
আপনার পরিষেবা এপিআই রিসোর্স সার্ভার একটি বৈধ অ্যাক্সেস টোকেন উপস্থাপন করা হলে ব্যবহারকারীর ডেটাতে প্রবেশাধিকার প্রদান করে।

সুসংহত সংযোগের জন্য প্রয়োজনীয়তা

  • মৌলিক OAuth লিঙ্কিং ফ্লো বাস্তবায়ন করুন। আপনার পরিষেবাতে অবশ্যই OAuth 2.0-সম্মত অথরাইজেশন এবং টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট থাকতে হবে।
  • আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টকে অবশ্যই JSON Web Token (JWT) অ্যাসারশন সমর্থন করতে হবে এবং check , create , ও get ইন্টেন্টগুলো ইমপ্লিমেন্ট করতে হবে।

সুবিন্যস্ত সংযোগের জন্য সিদ্ধান্ত যুক্তি

নিম্নলিখিত লজিকটি নির্ধারণ করে যে স্ট্রিমলাইনড লিঙ্কিং ফ্লো চলাকালীন ইনটেন্টগুলি কীভাবে কল করা হবে:

  1. আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি কোনো অ্যাকাউন্ট আছে? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
    1. হ্যাঁ : ব্যবহারকারী কি আপনার প্ল্যাটফর্মে সাইন ইন করার জন্য তাদের গুগল অ্যাকাউন্টের সাথে যুক্ত ইমেলটি ব্যবহার করেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
      1. হ্যাঁ : আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি একটি মিলে যাওয়া অ্যাকাউন্ট আছে? (নিশ্চিত করার জন্য check intent কল করা হয়)
        1. হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে get intent কল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক হয়ে যায়।
        2. না : নতুন অ্যাকাউন্ট তৈরি করবেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
          1. হ্যাঁ: যদি ক্রিয়েট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে create intent কল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক করা হয়।
          2. না : OAuth লিঙ্কিং প্রক্রিয়াটি চালু হয়, ব্যবহারকারীকে তার ব্রাউজারে নিয়ে যাওয়া হয় এবং তাকে অন্য একটি ইমেলের মাধ্যমে লিঙ্ক করার বিকল্প দেওয়া হয়।
      2. না : OAuth লিঙ্কিং প্রক্রিয়াটি চালু হয়, ব্যবহারকারীকে তার ব্রাউজারে নিয়ে যাওয়া হয় এবং তাকে অন্য একটি ইমেলের মাধ্যমে লিঙ্ক করার বিকল্প দেওয়া হয়।
    2. না : আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি একটি মিলে যাওয়া অ্যাকাউন্ট আছে? (নিশ্চিত করার জন্য check intent কল করা হয়)
      1. হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে get intent কল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক হয়ে যায়।
      2. না : যদি create intent সফলভাবে রিটার্ন করে, তাহলে create intent কল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক করা হয়।

বাস্তবায়ন রেসিপি

স্ট্রিমলাইনড লিঙ্কিং সমর্থন করার জন্য আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টে অবশ্যই check , get এবং create ইন্টেন্টগুলো ইমপ্লিমেন্ট করতে হবে।

বিভিন্ন ইনটেন্ট পরিচালনা করতে এই ধাপগুলো অনুসরণ করুন:

检查现有用户账号(检查 intent)

Google 会调用您的令牌交换端点,以验证 Google 用户是否存在于您的系统中。如需了解参数详情,请参阅简化的关联 intent

实现方案

如需处理 check intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type(必须为 urn:ietf:params:oauth:grant-type:jwt-bearer)。
    • 使用 JWT 验证 中的条件验证 assertion (JWT)。
  2. 查找用户

    • 检查 JWT 中的 Google 账号 ID (sub) 或电子邮件地址是否与数据库中的用户匹配。
  3. 回应

    • 如果找到:返回 HTTP 200 OK,并附带 {"account_found": "true"}
    • 如果未找到:返回 HTTP 404 Not Found,并附带 {"account_found": "false"}

স্বয়ংক্রিয় লিঙ্কিং পরিচালনা করুন (গেট ইন্টেন্ট)

অ্যাকাউন্টটি বিদ্যমান থাকলে, টোকেন পুনরুদ্ধার করার জন্য Google আপনার এন্ডপয়েন্টে intent=get প্যারামিটারটি কল করে। প্যারামিটারের বিস্তারিত জানতে, Streamlined Linking Intents দেখুন।

বাস্তবায়ন রেসিপি

get ইন্টেন্টটি পরিচালনা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. অনুরোধটি যাচাই করুন :

    • client_id , client_secret এবং grant_type যাচাই করুন।
    • assertion (JWT) যাচাই করুন।
  2. অনুসন্ধান ব্যবহারকারী :

    • sub অথবা email ক্লেইম ব্যবহার করে ব্যবহারকারীর অস্তিত্ব যাচাই করুন।
  3. উত্তর দিন :

    • সফল হলে: একটি JSON রেসপন্সে (HTTP 200 OK ) access_token , refresh_token , এবং expires_in তৈরি করে ফেরত দিন।
    • লিঙ্কিং ব্যর্থ হলে: {"error": "linking_error"} সহ HTTP 401 Unauthorized রিটার্ন করুন এবং স্ট্যান্ডার্ড OAuth লিঙ্কিং-এ ফিরে যাওয়ার জন্য একটি ঐচ্ছিক login_hint

使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)

如果不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情,请参阅 Streamlined Linking Intents

实现方案

如需处理 create intent,请执行以下操作:

  1. 验证请求

    • 验证 client_idclient_secretgrant_type
    • 验证 assertion (JWT)。
  2. 验证用户不存在

    • 检查您的数据库中是否已存在 subemail
    • 如果用户 存在,请返回 HTTP 401 Unauthorized,并使用 {"error": "linking_error", "login_hint": "USER_EMAIL"} 强制回退到 OAuth 关联。
  3. 创建账号

    • 使用 JWT 中的 subemailnamepicture 声明创建新的用户记录。
  4. 回应

    • 在 JSON 响应 (HTTP 200 OK) 中生成并返回令牌。

আপনার গুগল এপিআই ক্লায়েন্ট আইডি পান

অ্যাকাউন্ট লিঙ্কিং রেজিস্ট্রেশন প্রক্রিয়ার সময় আপনাকে আপনার গুগল এপিআই ক্লায়েন্ট আইডি প্রদান করতে হবে। OAuth লিঙ্কিং ধাপগুলো সম্পন্ন করার সময় আপনার তৈরি করা প্রজেক্টটি ব্যবহার করে এপিআই ক্লায়েন্ট আইডি পেতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

  1. ক্লায়েন্ট পৃষ্ঠায় যান।
  2. একটি গুগল এপিআই প্রজেক্ট তৈরি করুন বা নির্বাচন করুন।

    আপনার প্রোজেক্টে ওয়েব অ্যাপ্লিকেশন টাইপের জন্য কোনো ক্লায়েন্ট আইডি না থাকলে, একটি তৈরি করতে 'ক্রিয়েট ক্লায়েন্ট'-এ ক্লিক করুন। 'অথরাইজড জাভাস্ক্রিপ্ট অরিজিনস' বক্সে আপনার সাইটের ডোমেইনটি অবশ্যই অন্তর্ভুক্ত করুন। যখন আপনি লোকাল টেস্ট বা ডেভেলপমেন্ট করবেন, তখন আপনাকে অবশ্যই 'অথরাইজড জাভাস্ক্রিপ্ট অরিজিনস' ফিল্ডে http://localhost এবং http://localhost:<port_number> উভয়ই যোগ করতে হবে।

আপনার বাস্তবায়ন যাচাই করুন

আপনি OAuth 2.0 প্লেগ্রাউন্ড টুলটি ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।

টুলটিতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. OAuth 2.0 কনফিগারেশন উইন্ডোটি খুলতে কনফিগারেশন ক্লিক করুন।
  2. OAuth ফ্লো ফিল্ডে ক্লায়েন্ট-সাইড নির্বাচন করুন।
  3. OAuth Endpoints ফিল্ডে Custom নির্বাচন করুন।
  4. আপনার OAuth 2.0 এন্ডপয়েন্ট এবং Google-কে বরাদ্দ করা ক্লায়েন্ট আইডি সংশ্লিষ্ট ফিল্ডগুলিতে উল্লেখ করুন।
  5. ধাপ ১ অংশে, কোনো গুগল স্কোপ নির্বাচন করবেন না। এর পরিবর্তে, এই ক্ষেত্রটি খালি রাখুন অথবা আপনার সার্ভারের জন্য বৈধ একটি স্কোপ টাইপ করুন (যদি আপনি OAuth স্কোপ ব্যবহার না করেন তবে একটি ইচ্ছামতো স্ট্রিং টাইপ করুন)। আপনার কাজ শেষ হলে, 'Authorize APIs'-এ ক্লিক করুন।
  6. ধাপ ২ এবং ধাপ ৩ অংশে, OAuth 2.0 ফ্লোটি অনুসরণ করুন এবং যাচাই করুন যে প্রতিটি ধাপ উদ্দেশ্য অনুযায়ী কাজ করছে।

আপনি গুগল অ্যাকাউন্ট লিঙ্কিং ডেমো টুলটি ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।

টুলটিতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

  1. ‘Sign in with Google’ বোতামটিতে ক্লিক করুন।
  2. যে অ্যাকাউন্টটি লিঙ্ক করতে চান, সেটি বেছে নিন।
  3. সার্ভিস আইডিটি প্রবেশ করান।
  4. ঐচ্ছিকভাবে এক বা একাধিক স্কোপ লিখুন যেগুলোর জন্য আপনি অ্যাক্সেসের অনুরোধ করবেন।
  5. স্টার্ট ডেমো-তে ক্লিক করুন।
  6. অনুরোধ করা হলে, লিঙ্কিং অনুরোধে সম্মতি ও অস্বীকৃতি জানিয়ে তা নিশ্চিত করুন।
  7. আপনাকে আপনার প্ল্যাটফর্মে পুনঃনির্দেশিত করা হয়েছে কিনা তা নিশ্চিত করুন।