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 ইন্টেন্টগুলো ইমপ্লিমেন্ট করতে হবে।

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

Check for an existing user account (check intent)

Google calls your token exchange endpoint to verify if the Google user exists in your system. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the check intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type (must be urn:ietf:params:oauth:grant-type:jwt-bearer).
    • Validate the assertion (JWT) using the criteria in JWT Validation.
  2. Lookup user:

    • Check if the Google Account ID (sub) or email address in the JWT matches a user in your database.
  3. Respond:

    • If found: Return HTTP 200 OK with {"account_found": "true"}.
    • If not found: Return HTTP 404 Not Found with {"account_found": "false"}.

Handle automatic linking (get intent)

If the account exists, Google calls your endpoint with intent=get to retrieve tokens. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the get intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type.
    • Validate the assertion (JWT).
  2. Lookup user:

    • Verify the user exists using the sub or email claim.
  3. Respond:

    • If successful: Generate and return access_token, refresh_token, and expires_in in a JSON response (HTTP 200 OK).
    • If linking fails: Return HTTP 401 Unauthorized with {"error": "linking_error"} and an optional login_hint to fall back to standard OAuth linking.

Handle account creation using Sign in with Google (create intent)

If no account exists, Google calls your endpoint with intent=create to create a new user. For parameter details, see Streamlined Linking Intents.

Implementation Recipe

To handle the create intent, perform the following actions:

  1. Validate the request:

    • Verify client_id, client_secret, and grant_type.
    • Validate the assertion (JWT).
  2. Verify user does not exist:

    • Check if the sub or email is already in your database.
    • If the user does exist: Return HTTP 401 Unauthorized with {"error": "linking_error", "login_hint": "USER_EMAIL"} to force fallback to OAuth linking.
  3. Create account:

    • Use the sub, email, name, and picture claims from the JWT to create a new user record.
  4. Respond:

    • Generate and return tokens in a JSON response (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. আপনাকে আপনার প্ল্যাটফর্মে পুনঃনির্দেশিত করা হয়েছে কিনা তা নিশ্চিত করুন।