OAuth ব্যবহার করে গুগল অ্যাকাউন্ট লিঙ্ক করা (অন্তর্নিহিত প্রবাহ - আর্কাইভকৃত)

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

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

গুগল অ্যাকাউন্ট লিঙ্কিং: OAuth ইমপ্লিসিট ফ্লো

নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামটি ব্যবহারকারী, গুগল এবং আপনার পরিষেবার এন্ডপয়েন্টগুলির মধ্যেকার মিথস্ক্রিয়া বিশদভাবে বর্ণনা করে।

ব্যবহারকারী গুগল অ্যাপ / ব্রাউজার আপনার প্রমাণীকরণ এন্ডপয়েন্ট ১. ব্যবহারকারী লিঙ্কিং শুরু করেন ২. প্রমাণীকরণ এন্ডপয়েন্টে (GET) পুনঃনির্দেশ করুন ক্লায়েন্ট_আইডি, রিডাইরেক্ট_ইউআরআই, স্টেট, স্কোপ ৩. সাইন-ইন ও সম্মতি স্ক্রিন প্রদর্শন করুন ৪. ব্যবহারকারী প্রমাণীকরণ করেন এবং সম্মতি প্রদান করেন ৫. টোকেন সহ গুগলে ফেরত পাঠান (GET) অ্যাক্সেস_টোকেন, অবস্থা ৬. ব্যবহারকারীর টোকেন সংরক্ষণ করুন ৭. ব্যবহারকারীর রিসোর্স অ্যাক্সেস করুন
চিত্র ১. গুগল অ্যাকাউন্ট লিঙ্ক করার জন্য OAuth 2.0 ইমপ্লিসিট ফ্লো-এর ঘটনাক্রম।

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

নিম্নলিখিত সারণীটি গুগল অ্যাকাউন্ট লিঙ্কিং (GAL) OAuth ইমপ্লিসিট ফ্লো-তে অংশগ্রহণকারীদের ভূমিকা ও দায়িত্ব সংজ্ঞায়িত করে। উল্লেখ্য যে, GAL-এ গুগল OAuth ক্লায়েন্ট হিসেবে কাজ করে, অপরদিকে আপনার পরিষেবাটি আইডেন্টিটি/সার্ভিস প্রোভাইডার হিসেবে কাজ করে।

অভিনেতা / উপাদান GAL ভূমিকা দায়িত্বসমূহ
গুগল অ্যাপ / সার্ভার OAuth ক্লায়েন্ট ফ্লোটি শুরু করে, ব্রাউজার রিডাইরেক্টের মাধ্যমে অ্যাক্সেস টোকেন গ্রহণ করে এবং আপনার সার্ভিসের এপিআইগুলো অ্যাক্সেস করার জন্য তা নিরাপদে সংরক্ষণ করে।
আপনার অনুমোদন এন্ডপয়েন্ট অনুমোদন সার্ভার আপনার ব্যবহারকারীদের পরিচয় যাচাই করে, তাদের সম্মতি গ্রহণ করে এবং সরাসরি গুগলকে দীর্ঘস্থায়ী অ্যাক্সেস টোকেন প্রদান করে।
গুগল রিডাইরেক্ট ইউআরআই কলব্যাক এন্ডপয়েন্ট আপনার অনুমোদন পরিষেবা থেকে ব্যবহারকারীর পুনঃনির্দেশনা গ্রহণ করে, যেখানে URL খণ্ডে access_token এবং state মানগুলো থাকে।

গুগল দ্বারা শুরু করা একটি সাধারণ OAuth 2.0 ইমপ্লিসিট ফ্লো সেশনের প্রবাহটি নিম্নরূপ:

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

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

ইমপ্লিসিট ফ্লো বাস্তবায়ন করতে এই ধাপগুলো অনুসরণ করুন।

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

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

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

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

    • নিশ্চিত করুন যে client_id টি Google-কে বরাদ্দ করা Client ID-র সাথে মেলে।
    • নিশ্চিত করুন যে redirect_uri প্রত্যাশিত Google রিডাইরেক্ট URL-এর সাথে মেলে: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • যাচাই করুন যে response_type হলো token
  2. ব্যবহারকারীকে প্রমাণীকরণ করুন :

    • ব্যবহারকারী আপনার পরিষেবাতে সাইন ইন করেছেন কিনা তা যাচাই করুন।
    • যদি ব্যবহারকারী সাইন ইন করা না থাকেন, তাহলে তাকে আপনার সাইন-ইন বা সাইন-আপ প্রক্রিয়াটি সম্পন্ন করতে বলুন।
  3. অ্যাক্সেস টোকেন তৈরি করুন :

    • ব্যবহারকারী এবং ক্লায়েন্টের সাথে যুক্ত একটি অনন্য, অনুমান-অযোগ্য অ্যাক্সেস টোকেন তৈরি করুন।
  4. Google-এ ফেরত পাঠান :

    • ব্রাউজারকে redirect_uri তে দেওয়া URL-এ রিডাইরেক্ট করুন।
    • URL ফ্র্যাগমেন্টে (হ্যাশ) নিম্নলিখিত প্যারামিটারগুলো যুক্ত করুন:
      • access_token : আপনার তৈরি করা অ্যাক্সেস টোকেন।
      • token_type : অবশ্যই bearer হতে হবে।
      • state : গুগল থেকে প্রাপ্ত অপরিবর্তিত অবস্থার মান।
ব্যবহারকারীর তথ্যের অনুরোধগুলি পরিচালনা করুন

ইউজারইনফো এন্ডপয়েন্ট হল একটি OAuth 2.0 সুরক্ষিত রিসোর্স যা লিঙ্ক করা ব্যবহারকারীর বিষয়ে দাবি ফেরত দেয়। ইউজার ইনফো এন্ডপয়েন্ট বাস্তবায়ন এবং হোস্ট করা ঐচ্ছিক, নিম্নলিখিত ব্যবহারের ক্ষেত্রে ছাড়া:

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

userinfo এন্ডপয়েন্ট রিকোয়েস্ট হেডার
Authorization header টাইপ বিয়ারারের অ্যাক্সেস টোকেন।

উদাহরণস্বরূপ, যদি আপনার ব্যবহারকারীর তথ্যের এন্ডপয়েন্ট https://myservice.example.com/userinfo এ উপলব্ধ থাকে, তাহলে একটি অনুরোধ নিম্নলিখিতটির মতো দেখতে পারে:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

অনুরোধগুলি পরিচালনা করার জন্য আপনার ব্যবহারকারীর তথ্যের শেষ পয়েন্টের জন্য, নিম্নলিখিত পদক্ষেপগুলি করুন:

  1. অনুমোদন শিরোনাম থেকে অ্যাক্সেস টোকেন বের করুন এবং অ্যাক্সেস টোকেনের সাথে যুক্ত ব্যবহারকারীর জন্য তথ্য ফেরত দিন।
  2. অ্যাক্সেস টোকেনটি অবৈধ হলে, WWW-Authenticate প্রতিক্রিয়া শিরোনাম ব্যবহার করে একটি HTTP 401 অননুমোদিত ত্রুটি ফেরত দিন। নীচে একটি ব্যবহারকারীর তথ্য ত্রুটি প্রতিক্রিয়ার একটি উদাহরণ:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    লিঙ্কিং প্রক্রিয়া চলাকালীন যদি একটি 401 অননুমোদিত, বা অন্য কোনো অসফল ত্রুটির প্রতিক্রিয়া ফেরত দেওয়া হয়, তবে ত্রুটিটি পুনরুদ্ধারযোগ্য হবে না, পুনরুদ্ধার করা টোকেন বাতিল করা হবে এবং ব্যবহারকারীকে আবার লিঙ্কিং প্রক্রিয়া শুরু করতে হবে।
  3. অ্যাক্সেস টোকেনটি বৈধ হলে, HTTPS প্রতিক্রিয়ার বডিতে নিম্নলিখিত JSON অবজেক্টের সাথে HTTP 200 প্রতিক্রিয়া ফেরত দিন:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    যদি আপনার ব্যবহারকারীর তথ্য এন্ডপয়েন্ট একটি HTTP 200 সাফল্যের প্রতিক্রিয়া প্রদান করে, তবে পুনরুদ্ধার করা টোকেন এবং দাবিগুলি ব্যবহারকারীর Google অ্যাকাউন্টের বিরুদ্ধে নিবন্ধিত হয়।

    ব্যবহারকারীর তথ্য শেষ পয়েন্ট প্রতিক্রিয়া
    sub একটি অনন্য আইডি যা আপনার সিস্টেমে ব্যবহারকারীকে শনাক্ত করে।
    email ব্যবহারকারীর ইমেল ঠিকানা।
    given_name ঐচ্ছিক: ব্যবহারকারীর প্রথম নাম।
    family_name ঐচ্ছিক: ব্যবহারকারীর শেষ নাম।
    name ঐচ্ছিক: ব্যবহারকারীর পুরো নাম।
    picture ঐচ্ছিক: ব্যবহারকারীর প্রোফাইল ছবি।