সংক্ষিপ্ত বিবরণ
OAuth-ভিত্তিক সাইন ইন উইথ গুগল স্ট্রিমলাইনড লিঙ্কিং, OAuth লিঙ্কিং- এর উপরে সাইন ইন উইথ গুগল সুবিধাটি যুক্ত করে। এটি গুগল ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন লিঙ্কিং অভিজ্ঞতা প্রদান করে এবং অ্যাকাউন্ট তৈরির সুবিধাও দেয়, যার মাধ্যমে ব্যবহারকারী তার গুগল অ্যাকাউন্ট ব্যবহার করে আপনার পরিষেবাতে একটি নতুন অ্যাকাউন্ট তৈরি করতে পারেন।
OAuth এবং Sign in with Google ব্যবহার করে অ্যাকাউন্ট লিঙ্ক করার জন্য, এই সাধারণ ধাপগুলো অনুসরণ করুন:
- প্রথমে, ব্যবহারকারীর গুগল প্রোফাইল অ্যাক্সেস করার জন্য তার অনুমতি নিন।
- ব্যবহারকারীর অ্যাকাউন্টটি বিদ্যমান কিনা তা যাচাই করতে তাদের প্রোফাইলের তথ্য ব্যবহার করুন।
- বিদ্যমান ব্যবহারকারীদের অ্যাকাউন্টগুলো লিঙ্ক করুন।
- আপনার প্রমাণীকরণ সিস্টেমে গুগল ব্যবহারকারীর কোনো মিল খুঁজে না পেলে, গুগল থেকে প্রাপ্ত আইডি টোকেনটি যাচাই করুন। এরপর আপনি আইডি টোকেনে থাকা প্রোফাইল তথ্যের ভিত্তিতে একজন ব্যবহারকারী তৈরি করতে পারবেন।

চিত্র ১। স্ট্রিমলাইনড লিঙ্কিং-এর মাধ্যমে ব্যবহারকারীর ফোনে অ্যাকাউন্ট লিঙ্ক করা।
সুবিন্যস্ত সংযোগ: OAuth + Google Flow দিয়ে সাইন ইন
নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামটি স্ট্রিমলাইনড লিঙ্কিং-এর জন্য ব্যবহারকারী, গুগল এবং আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টের মধ্যকার মিথস্ক্রিয়া বিস্তারিতভাবে বর্ণনা করে।
ভূমিকা ও দায়িত্ব
নিম্নলিখিত সারণিতে স্ট্রিমলাইনড লিঙ্কিং ফ্লো-তে অংশগ্রহণকারীদের ভূমিকা ও দায়িত্ব সংজ্ঞায়িত করা হয়েছে।
| অভিনেতা / উপাদান | GAL ভূমিকা | দায়িত্বসমূহ |
|---|---|---|
| গুগল অ্যাপ / সার্ভার | OAuth ক্লায়েন্ট | গুগল দিয়ে সাইন ইন করার জন্য ব্যবহারকারীর সম্মতি গ্রহণ করে, আপনার সার্ভারে পরিচয় নিশ্চিতকরণ (JWT) পাঠায় এবং ফলস্বরূপ প্রাপ্ত টোকেনগুলো নিরাপদে সংরক্ষণ করে। |
| আপনার টোকেন বিনিময় এন্ডপয়েন্ট | পরিচয় প্রদানকারী / অনুমোদন সার্ভার | পরিচয় যাচাইকরণ, বিদ্যমান অ্যাকাউন্ট পরীক্ষা করা, অ্যাকাউন্ট লিঙ্ক করার ইনটেন্ট ( check , get , create ) পরিচালনা করা এবং অনুরোধকৃত ইনটেন্টের উপর ভিত্তি করে টোকেন ইস্যু করা হয়। |
| আপনার পরিষেবা এপিআই | রিসোর্স সার্ভার | একটি বৈধ অ্যাক্সেস টোকেন উপস্থাপন করা হলে ব্যবহারকারীর ডেটাতে প্রবেশাধিকার প্রদান করে। |
সুসংহত সংযোগের জন্য প্রয়োজনীয়তা
- মৌলিক OAuth লিঙ্কিং ফ্লো বাস্তবায়ন করুন। আপনার পরিষেবাতে অবশ্যই OAuth 2.0-সম্মত অথরাইজেশন এবং টোকেন এক্সচেঞ্জ এন্ডপয়েন্ট থাকতে হবে।
- আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টকে অবশ্যই JSON Web Token (JWT) অ্যাসারশন সমর্থন করতে হবে এবং
check,create, ওgetইন্টেন্টগুলো ইমপ্লিমেন্ট করতে হবে।
সুবিন্যস্ত সংযোগের জন্য সিদ্ধান্ত যুক্তি
নিম্নলিখিত লজিকটি নির্ধারণ করে যে স্ট্রিমলাইনড লিঙ্কিং ফ্লো চলাকালীন ইনটেন্টগুলি কীভাবে কল করা হবে:
- আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি কোনো অ্যাকাউন্ট আছে? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
- হ্যাঁ : ব্যবহারকারী কি আপনার প্ল্যাটফর্মে সাইন ইন করার জন্য তাদের গুগল অ্যাকাউন্টের সাথে যুক্ত ইমেলটি ব্যবহার করেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
- হ্যাঁ : আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি একটি মিলে যাওয়া অ্যাকাউন্ট আছে? (নিশ্চিত করার জন্য
check intentকল করা হয়)- হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
get intentকল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক হয়ে যায়। - না : নতুন অ্যাকাউন্ট তৈরি করবেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
- হ্যাঁ: যদি ক্রিয়েট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
create intentকল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক করা হয়। - না : OAuth লিঙ্কিং প্রক্রিয়াটি চালু হয়, ব্যবহারকারীকে তার ব্রাউজারে নিয়ে যাওয়া হয় এবং তাকে অন্য একটি ইমেলের মাধ্যমে লিঙ্ক করার বিকল্প দেওয়া হয়।
- হ্যাঁ: যদি ক্রিয়েট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
- হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
- না : OAuth লিঙ্কিং প্রক্রিয়াটি চালু হয়, ব্যবহারকারীকে তার ব্রাউজারে নিয়ে যাওয়া হয় এবং তাকে অন্য একটি ইমেলের মাধ্যমে লিঙ্ক করার বিকল্প দেওয়া হয়।
- হ্যাঁ : আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি একটি মিলে যাওয়া অ্যাকাউন্ট আছে? (নিশ্চিত করার জন্য
- না : আপনার প্রমাণীকরণ সিস্টেমে ব্যবহারকারীর কি একটি মিলে যাওয়া অ্যাকাউন্ট আছে? (নিশ্চিত করার জন্য
check intentকল করা হয়)- হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
get intentকল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক হয়ে যায়। - না : যদি create intent সফলভাবে রিটার্ন করে, তাহলে
create intentকল করা হয় এবং অ্যাকাউন্টটি লিঙ্ক করা হয়।
- হ্যাঁ: যদি গেট ইন্টেন্ট সফলভাবে রিটার্ন করে, তাহলে
- হ্যাঁ : ব্যবহারকারী কি আপনার প্ল্যাটফর্মে সাইন ইন করার জন্য তাদের গুগল অ্যাকাউন্টের সাথে যুক্ত ইমেলটি ব্যবহার করেন? (ব্যবহারকারী হ্যাঁ বা না নির্বাচন করে সিদ্ধান্ত নেবেন)
বাস্তবায়ন রেসিপি
স্ট্রিমলাইনড লিঙ্কিং সমর্থন করার জন্য আপনার টোকেন এক্সচেঞ্জ এন্ডপয়েন্টে অবশ্যই check , get এবং create ইন্টেন্টগুলো ইমপ্লিমেন্ট করতে হবে।
বিভিন্ন ইনটেন্ট পরিচালনা করতে এই ধাপগুলো অনুসরণ করুন:
检查现有用户账号(检查 intent)
Google 会调用您的令牌交换端点,以验证 Google 用户是否存在于您的系统中。如需了解参数详情,请参阅简化的关联 intent。
实现方案
如需处理 check intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type(必须为urn:ietf:params:oauth:grant-type:jwt-bearer)。 - 使用 JWT 验证 中的条件验证
assertion(JWT)。
- 验证
查找用户:
- 检查 JWT 中的 Google 账号 ID (
sub) 或电子邮件地址是否与数据库中的用户匹配。
- 检查 JWT 中的 Google 账号 ID (
回应:
- 如果找到:返回 HTTP
200 OK,并附带{"account_found": "true"}。 - 如果未找到:返回 HTTP
404 Not Found,并附带{"account_found": "false"}。
- 如果找到:返回 HTTP
স্বয়ংক্রিয় লিঙ্কিং পরিচালনা করুন (গেট ইন্টেন্ট)
অ্যাকাউন্টটি বিদ্যমান থাকলে, টোকেন পুনরুদ্ধার করার জন্য Google আপনার এন্ডপয়েন্টে intent=get প্যারামিটারটি কল করে। প্যারামিটারের বিস্তারিত জানতে, Streamlined Linking Intents দেখুন।
বাস্তবায়ন রেসিপি
get ইন্টেন্টটি পরিচালনা করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
অনুরোধটি যাচাই করুন :
-
client_id,client_secretএবংgrant_typeযাচাই করুন। -
assertion(JWT) যাচাই করুন।
-
অনুসন্ধান ব্যবহারকারী :
-
subঅথবাemailক্লেইম ব্যবহার করে ব্যবহারকারীর অস্তিত্ব যাচাই করুন।
-
উত্তর দিন :
- সফল হলে: একটি JSON রেসপন্সে (HTTP
200 OK)access_token,refresh_token, এবংexpires_inতৈরি করে ফেরত দিন। - লিঙ্কিং ব্যর্থ হলে:
{"error": "linking_error"}সহ HTTP401 Unauthorizedরিটার্ন করুন এবং স্ট্যান্ডার্ড OAuth লিঙ্কিং-এ ফিরে যাওয়ার জন্য একটি ঐচ্ছিকlogin_hint।
- সফল হলে: একটি JSON রেসপন্সে (HTTP
使用“使用 Google 账号登录”功能处理账号创建事宜(创建 intent)
如果不存在任何账号,Google 会使用 intent=create 调用您的端点,以创建新用户。如需了解参数详情,请参阅 Streamlined Linking Intents。
实现方案
如需处理 create intent,请执行以下操作:
验证请求:
- 验证
client_id、client_secret和grant_type。 - 验证
assertion(JWT)。
- 验证
验证用户不存在:
- 检查您的数据库中是否已存在
sub或email。 - 如果用户 存在,请返回 HTTP
401 Unauthorized,并使用{"error": "linking_error", "login_hint": "USER_EMAIL"}强制回退到 OAuth 关联。
- 检查您的数据库中是否已存在
创建账号:
- 使用 JWT 中的
sub、email、name和picture声明创建新的用户记录。
- 使用 JWT 中的
回应:
- 在 JSON 响应 (HTTP
200 OK) 中生成并返回令牌。
- 在 JSON 响应 (HTTP
আপনার গুগল এপিআই ক্লায়েন্ট আইডি পান
অ্যাকাউন্ট লিঙ্কিং রেজিস্ট্রেশন প্রক্রিয়ার সময় আপনাকে আপনার গুগল এপিআই ক্লায়েন্ট আইডি প্রদান করতে হবে। OAuth লিঙ্কিং ধাপগুলো সম্পন্ন করার সময় আপনার তৈরি করা প্রজেক্টটি ব্যবহার করে এপিআই ক্লায়েন্ট আইডি পেতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- ক্লায়েন্ট পৃষ্ঠায় যান।
একটি গুগল এপিআই প্রজেক্ট তৈরি করুন বা নির্বাচন করুন।
আপনার প্রোজেক্টে ওয়েব অ্যাপ্লিকেশন টাইপের জন্য কোনো ক্লায়েন্ট আইডি না থাকলে, একটি তৈরি করতে 'ক্রিয়েট ক্লায়েন্ট'-এ ক্লিক করুন। 'অথরাইজড জাভাস্ক্রিপ্ট অরিজিনস' বক্সে আপনার সাইটের ডোমেইনটি অবশ্যই অন্তর্ভুক্ত করুন। যখন আপনি লোকাল টেস্ট বা ডেভেলপমেন্ট করবেন, তখন আপনাকে অবশ্যই 'অথরাইজড জাভাস্ক্রিপ্ট অরিজিনস' ফিল্ডে
http://localhostএবংhttp://localhost:<port_number>উভয়ই যোগ করতে হবে।
আপনার বাস্তবায়ন যাচাই করুন
আপনি OAuth 2.0 প্লেগ্রাউন্ড টুলটি ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।
টুলটিতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- OAuth 2.0 কনফিগারেশন উইন্ডোটি খুলতে কনফিগারেশন ক্লিক করুন।
- OAuth ফ্লো ফিল্ডে ক্লায়েন্ট-সাইড নির্বাচন করুন।
- OAuth Endpoints ফিল্ডে Custom নির্বাচন করুন।
- আপনার OAuth 2.0 এন্ডপয়েন্ট এবং Google-কে বরাদ্দ করা ক্লায়েন্ট আইডি সংশ্লিষ্ট ফিল্ডগুলিতে উল্লেখ করুন।
- ধাপ ১ অংশে, কোনো গুগল স্কোপ নির্বাচন করবেন না। এর পরিবর্তে, এই ক্ষেত্রটি খালি রাখুন অথবা আপনার সার্ভারের জন্য বৈধ একটি স্কোপ টাইপ করুন (যদি আপনি OAuth স্কোপ ব্যবহার না করেন তবে একটি ইচ্ছামতো স্ট্রিং টাইপ করুন)। আপনার কাজ শেষ হলে, 'Authorize APIs'-এ ক্লিক করুন।
- ধাপ ২ এবং ধাপ ৩ অংশে, OAuth 2.0 ফ্লোটি অনুসরণ করুন এবং যাচাই করুন যে প্রতিটি ধাপ উদ্দেশ্য অনুযায়ী কাজ করছে।
আপনি গুগল অ্যাকাউন্ট লিঙ্কিং ডেমো টুলটি ব্যবহার করে আপনার বাস্তবায়ন যাচাই করতে পারেন।
টুলটিতে, নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- ‘Sign in with Google’ বোতামটিতে ক্লিক করুন।
- যে অ্যাকাউন্টটি লিঙ্ক করতে চান, সেটি বেছে নিন।
- সার্ভিস আইডিটি প্রবেশ করান।
- ঐচ্ছিকভাবে এক বা একাধিক স্কোপ লিখুন যেগুলোর জন্য আপনি অ্যাক্সেসের অনুরোধ করবেন।
- স্টার্ট ডেমো-তে ক্লিক করুন।
- অনুরোধ করা হলে, লিঙ্কিং অনুরোধে সম্মতি ও অস্বীকৃতি জানিয়ে তা নিশ্চিত করুন।
- আপনাকে আপনার প্ল্যাটফর্মে পুনঃনির্দেশিত করা হয়েছে কিনা তা নিশ্চিত করুন।