ব্যবহারকারীর অনুমোদন কিভাবে কাজ করে

আপনি যদি গুগল আইডেন্টিটি সার্ভিসেস বা অথরাইজেশন বিষয়ে নতুন বা অপরিচিত হন, তাহলে ওভারভিউ পড়ে শুরু করুন।

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

শুধুমাত্র প্রমাণীকরণের সুযোগ

ব্যবহারকারী প্রমাণীকরণের জন্য কয়েকটি স্কোপ শুধুমাত্র ব্যবহৃত হয়: email , profile এবং openid । যদি আপনার অ্যাপ শুধুমাত্র এই স্কোপগুলো ব্যবহার করে, তবে ব্যবহারকারীর সাইন-আপ এবং সাইন-ইন এর জন্য একটি JWT আইডি টোকেন এবং 'সাইন ইন উইথ গুগল' আপনার প্রয়োজন মেটাতে পারে কিনা তা বিবেচনা করুন। বেশিরভাগ ক্ষেত্রে, ব্যবহারকারী প্রমাণীকরণের জন্য এটিই সবচেয়ে সহজ পদ্ধতি।

মূল পদ এবং ধারণা

এই নির্দেশিকাগুলো ধরে নেয় যে, OAuth 2.0-এর ধারণা এবং RFC6749- এর মতো IETF স্ট্যান্ডার্ড সম্পর্কে আপনার প্রাথমিক ধারণা আছে। অনুমোদন নির্দেশিকা জুড়ে নিম্নলিখিত পরিভাষাগুলো ব্যবহৃত হয়েছে:

  • অ্যাক্সেস টোকেন হলো গুগল কর্তৃক ইস্যুকৃত ব্যবহারকারী-প্রতি একটি স্বল্পস্থায়ী পরিচয়পত্র, যা নিরাপদে গুগল এপিআই কল করতে এবং ব্যবহারকারীর ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।
  • অথরাইজেশন কোড হলো একটি অস্থায়ী কোড যা গুগল ব্রাউজার থেকে তাদের গুগল অ্যাকাউন্টে সাইন-ইন করা স্বতন্ত্র ব্যবহারকারীদের নিরাপদে শনাক্ত করার জন্য ইস্যু করে। আপনার ব্যাকএন্ড প্ল্যাটফর্ম এই কোডটিকে অ্যাক্সেস এবং রিফ্রেশ টোকেনের জন্য বিনিময় করে।
  • রিফ্রেশ টোকেন হলো গুগল কর্তৃক ইস্যুকৃত ব্যবহারকারী-প্রতি একটি দীর্ঘস্থায়ী পরিচয়পত্র, যা আপনার প্ল্যাটফর্মে নিরাপদে সংরক্ষিত থাকে এবং ব্যবহারকারী উপস্থিত না থাকলেও একটি নতুন ও বৈধ অ্যাক্সেস টোকেন পাওয়ার জন্য এটি ব্যবহার করা যেতে পারে।
  • স্কোপ টোকেনগুলিকে একটি সংজ্ঞায়িত এবং সীমিত পরিমাণ ব্যবহারকারীর ডেটার মধ্যে সীমাবদ্ধ রাখে, আরও তথ্যের জন্য Google API-এর জন্য OAuth 2.0 স্কোপ দেখুন।
  • পপআপ মোড হলো ব্যবহারকারীর ব্রাউজারে চলমান একটি জাভাস্ক্রিপ্ট কলব্যাকের উপর ভিত্তি করে তৈরি একটি অথরাইজেশন কোড ফ্লো। গুগল আপনার কলব্যাক হ্যান্ডলারকে আহ্বান করে, যা পরবর্তীতে আপনার প্ল্যাটফর্মে অথরাইজেশন কোড পাঠানোর জন্য দায়ী থাকে; এই কাজটি কীভাবে করা হবে, তা আপনার উপর নির্ভর করে।
  • রিডাইরেক্ট মোড হলো HTTP রিডাইরেক্টের উপর ভিত্তি করে তৈরি একটি অথরাইজেশন কোড ফ্লো। এতে ইউজার-এজেন্টকে প্রথমে গুগলে রিডাইরেক্ট করা হয় এবং গুগল থেকে আপনার প্ল্যাটফর্মের অথরাইজেশন কোড এন্ডপয়েন্টে দ্বিতীয় একটি রিডাইরেক্টের মাধ্যমে কোডটি পাঠানো হয়।

টোকেনের মেয়াদকাল ইস্যুকারী হিসেবে গুগল দ্বারা নির্ধারিত হয়। বিভিন্ন কারণবশত এর সঠিক সময়কাল পরিবর্তিত হতে পারে।

OAuth 2.0 প্রবাহ

দুটি ফ্লো—ইমপ্লিসিট এবং অথরাইজেশন কোড—নিয়ে আলোচনা করা হয়েছে। উভয় ফ্লো-ই গুগল এপিআই-এর সাথে ব্যবহারের জন্য উপযুক্ত একটি অ্যাক্সেস টোকেন প্রদান করে।

অথরাইজেশন কোড ফ্লো-টি সুপারিশ করা হয়, কারণ এটি উন্নত ব্যবহারকারী নিরাপত্তা প্রদান করে। এই ফ্লো-টি একটি রিফ্রেশ টোকেনও রিটার্ন করে, যা ব্যবহারকারীর উপস্থিতি ছাড়াই অ্যাক্সেস টোকেন পেতে ব্যবহার করা যেতে পারে। এর ফলে আপনার প্ল্যাটফর্ম অ্যাসিঙ্ক্রোনাস অ্যাকশন সম্পাদন করতে সক্ষম হয়, যেমন—শেষ মুহূর্তে নির্ধারিত কোনো আসন্ন মিটিংয়ের জন্য এসএমএস রিমাইন্ডার পাঠানো। ‘একটি অথরাইজেশন মডেল নির্বাচন করুন’ অংশে এই দুটি ফ্লো-এর মধ্যকার পার্থক্য আরও বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।

গুগল আইডেন্টিটি সার্ভিসেস জাভাস্ক্রিপ্ট লাইব্রেরিটি OAuth 2.0 স্ট্যান্ডার্ড অনুসরণ করে:

  • আপনার ইন-ব্রাউজার ওয়েব অ্যাপ যাতে গুগল এপিআই (Google APIs) কল করার জন্য প্রয়োজনীয় অ্যাক্সেস টোকেন দ্রুত পেতে পারে, সেজন্য অন্তর্নিহিত প্রবাহটি পরিচালনা করুন।
  • ব্যবহারকারীর ব্রাউজার থেকে অনুমোদন কোড প্রবাহ শুরু করুন।

সাধারণ পদক্ষেপগুলি

অন্তর্নিহিত এবং অনুমোদন কোড প্রবাহ উভয়ই একই ভাবে শুরু হয়:

  1. আপনার অ্যাপ এক বা একাধিক স্কোপে অ্যাক্সেসের অনুরোধ করছে।
  2. গুগল ব্যবহারকারীকে একটি সম্মতি ডায়ালগ বক্স দেখায় এবং প্রয়োজনে প্রথমে ব্যবহারকারীকে তার গুগল অ্যাকাউন্টে সাইন ইন করিয়ে নেয়।
  3. ব্যবহারকারী অনুরোধকৃত প্রতিটি পরিধি পৃথকভাবে অনুমোদন করেন।

এরপর প্রতিটি প্রবাহ ভিন্ন ভিন্ন ধাপে সমাপ্ত হয়।

অন্তর্নিহিত প্রবাহ ব্যবহার করার সময়

  • গুগল একটি কলব্যাক হ্যান্ডলার ব্যবহার করে আপনার অ্যাপকে সম্মতির ফলাফল সম্পর্কে অবহিত করে এবং অনুমোদিত স্কোপগুলোর জন্য একটি অ্যাক্সেস টোকেন ফেরত দেয়।

অথোরাইজেশন কোড ফ্লো ব্যবহার করার সময়

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

অ্যাক্সেস টোকেন পাওয়ার আগে, আপনার অ্যাপকে অনুরোধকৃত স্কোপগুলো অ্যাক্সেস করার জন্য প্রত্যেক ব্যবহারকারীকে অবশ্যই সম্মতি দিতে হবে। এটি করার জন্য, গুগল ধাপ ২-এর সময় একটি সম্মতি ডায়ালগ প্রদর্শন করে এবং এর ফলাফল myaccount.google.com/permissions- এ রেকর্ড করে রাখে।

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

চিত্র ১-এ, একটি একক স্কোপের জন্য সম্মতি ডায়ালগ বক্স দেখানো হয়েছে। যখন একটি একক স্কোপের জন্য অনুরোধ করা হয়, তখন স্কোপটি অনুমোদন বা প্রত্যাখ্যান করার জন্য কোনো চেকবক্সের প্রয়োজন হয় না।

User consent dialog with Cancel or Continue buttons and a single scope, no
checkboxes are shown.

চিত্র ১: একক পরিধিযুক্ত ব্যবহারকারীর সম্মতি সংলাপ।

চিত্র ২-এ, একাধিক স্কোপের জন্য সম্মতি ডায়ালগ বক্স দেখানো হয়েছে। যখন একাধিক স্কোপের জন্য অনুরোধ করা হয়, তখন ব্যবহারকারীকে প্রতিটি স্কোপ অনুমোদন বা প্রত্যাখ্যান করার সুযোগ দেওয়ার জন্য আলাদা চেকবক্সের প্রয়োজন হয়।

User consent dialog with Cancel or Continue buttons and multiple scopes, each
scope has a checkbox
selector.

চিত্র ২: একাধিক পরিধি সহ ব্যবহারকারীর সম্মতি ডায়ালগ।

ব্যবহারকারী অ্যাকাউন্ট

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

বাধ্যতামূলক না হলেও, আপনার ওয়েব অ্যাপ বা ব্যাকএন্ড প্ল্যাটফর্মে সাইন-আপ এবং সাইন-ইন করার জন্য 'সাইন ইন উইথ গুগল' ব্যবহার করার পরামর্শ দেওয়া হয়। এটি প্রয়োজনীয় ধাপের সংখ্যা কমিয়ে ব্যবহারকারীর অসুবিধা হ্রাস করে এবং ঐচ্ছিকভাবে আপনাকে আপনার প্ল্যাটফর্মের স্বতন্ত্র অ্যাকাউন্টগুলোর সাথে অ্যাক্সেস টোকেন যুক্ত করার সুযোগ দেয়।

উদাহরণস্বরূপ, 'সাইন ইন উইথ গুগল' ব্যবহার করলে একটি সক্রিয় গুগল অ্যাকাউন্ট সেশন তৈরি হয়, ফলে পরবর্তীতে অনুমোদনের অনুরোধ করার সময় ব্যবহারকারীকে গুগল অ্যাকাউন্টে সাইন-ইন করতে বলার প্রয়োজন হয় না। আপনি যদি ইউজারনেম ও পাসওয়ার্ড বা অন্য কোনো আইডেন্টিটি প্রোভাইডারের মতো অন্য কোনো উপায়ে আপনার অ্যাপে ব্যবহারকারীদের প্রমাণীকরণ করতে চান, তাহলেও সম্মতির জন্য তাদের প্রথমে একটি গুগল অ্যাকাউন্টে সাইন-ইন করতে হবে।

অনুমোদন শুরুর সময় একটি লগইন ইঙ্গিত —সাধারণত ব্যবহারকারীর গুগল অ্যাকাউন্টের ইমেল ঠিকানা—যোগ করলে গুগল অ্যাকাউন্ট বাছাইয়ের ধাপটি এড়িয়ে যেতে পারে, যা ব্যবহারকারীদের একটি ধাপ বাঁচিয়ে দেয়। 'সাইন ইন উইথ গুগল' দ্বারা ফেরত আসা আইডি টোকেন ক্রেডেনশিয়ালটিতে ব্যবহারকারীর ইমেল ঠিকানা থাকে।

শুধুমাত্র ব্রাউজারে চালিত ওয়েব অ্যাপগুলো ব্যবহারকারী প্রমাণীকরণের জন্য কেবলমাত্র গুগলের উপর নির্ভর করতে পারে এবং একটি ব্যবহারকারী অ্যাকাউন্ট ব্যবস্থাপনা সিস্টেম প্রয়োগ না করার সিদ্ধান্ত নিতে পারে। এই পরিস্থিতিতে, যা ইমপ্লিসিট ফ্লো নামে পরিচিত, একটি ব্যবহারকারী অ্যাকাউন্ট এবং ব্যবস্থাপনার জন্য সুরক্ষিত স্টোরেজের সাথে রিফ্রেশ টোকেন যুক্ত করার কোনো প্রয়োজন নেই।

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

ব্যবহারকারীরা তাদের গুগল অ্যাকাউন্ট সেটিংস থেকে যেকোনো সময় সম্মতি দেখতে বা প্রত্যাহার করতে পারেন।

ঐচ্ছিকভাবে, আপনার ওয়েব অ্যাপ বা প্ল্যাটফর্ম টোকেন বাতিল করতে এবং ব্যবহারকারীর সম্মতি অপসারণ করতে google.accounts.oauth2.revoke কল করতে পারে, যা তখন কাজে আসে যখন কোনো ব্যবহারকারী আপনার প্ল্যাটফর্ম থেকে তার অ্যাকাউন্ট মুছে ফেলে।

অন্যান্য অনুমোদন বিকল্প

বিকল্পভাবে, "OAuth 2.0 for Client-side Web Applications"- এ বর্ণিত পদ্ধতি অনুযায়ী ব্রাউজারগুলো সরাসরি গুগলের OAuth 2.0 এন্ডপয়েন্টগুলোতে কল করার মাধ্যমে অন্তর্নিহিত প্রবাহ ব্যবহার করে অ্যাক্সেস টোকেন পেতে পারে।

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

উভয় ক্ষেত্রেই আমরা আপনার ডেভেলপমেন্টের সময় ও শ্রম কমাতে এবং OAuth 2.0 Security Best Current Practice- এ বর্ণিত নিরাপত্তা ঝুঁকিগুলোর মতো ঝুঁকিগুলো হ্রাস করতে Google Identity Services লাইব্রেরি ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করি।