বাংলা আর্টিকেল:{Besic Of Authentication } Learn MERN Stack By Create Real-Estate Project -Part_8

বাংলা আর্টিকেল:{Besic Of Authentication } Learn MERN Stack By Create Real-Estate Project -Part_8

(Authentication & Authorization) ->Full-Stack Project To Learn React, NodeJs, MongoDB, Prisma And More Web Tools.

যখন কোন ক্লায়েন্ট (which can be a program or service) API এর সাথে কানেক্ট হতেচায়,তার জন্য তাকে নিজের আইডেন্টিটি prove করতে হয়। মানে আমি অমুক তোমার ওয়েব সার্ভিস ব্যবহার করতে চাচ্ছি এমনটা বলা। তো এই আইডেন্টিটি prove করার জন্য কিছু রুলস বা গাইডেন্স থাকে ,মোটাদাগে এই আইডেন্টিটি prove এর যে প্রক্রিয়া কে আমরা Authentication প্রটোকল বলতে পারি।

ক্লায়েন্ট remote access server (the server providing the API) ,সেটা হতে পারে প্লেন টেক্সট (unencrypted) অথবা encrypted (secure) ফর্ম এ , এর মাধ্যমে তার ক্রেডেনশিয়াল (like a username and password) সেন্ড করবে স্পেসিফিক API access নেয়ার জন্য। যখন সার্ভার ক্রেডেনশিয়াল গুলোকে রিসিভ করবে ,সার্ভার ডিসাইড করবে ওই ক্লায়েন্ট কে সে তার api তে acess দিবে, কি দিবে না।

এই acess দেয়া বা না দেয়া প্রসেস গুলোকেই মূলত authentication বলা হয়ে থাকে , ক্লায়েন্ড সার্ভার কমিউনিকেশন এর ক্ষেত্রে authentication খুব গুরুত্বপূর্ন কারণ, যদি unwanted ক্লায়েন্ট সার্ভার এ acess পেয়ে যায় তবে আমাদের ইম্পর্টেন্ট ডাটা গুলোকে সে তার মতো করে misuse করতে পারে আবার আমাদের hiden ডাটা চুরিও হতে পারে। তাই একজন ডেভেলপার হিসেবে secure অথেন্টিকেশন ও অথোরাইজেশন মেইনটেইন করা জরুরি।

ব্যাকএন্ড ও ফ্রন্টএন্ড এর দুনিয়ায় অনেক গুলো অথেন্টিকেশন সিস্টেম রয়েছে যেমন :

  • JWT Authentication

  • Token based Authentication

  • Session based Authentication

  • Basic Authentication

  • OAuth - Open Authorization

  • SSO - Single Sign On

আমরা আজকের এই আর্টিকেল এ এই সব গুলোর কিছু ওভারভিউ নেয়ার চেষ্টা করব।

Hay Programmers,

বাংলা আর্টিকেল: Learn MERN Stack By Create Real-Estate Project -Part_8 এ তোমাকে স্বাগতম।

আজকের আর্টিকেল এ আমরা অথেন্টিকেশন ও অথোরাইজেশন সম্পর্কে জানব। তুমি ব্যাকএন্ড ,ফ্রন্টএন্ড কিংবা ফুলস্ট্যাক ডেভেলপার যে দিকেই ফোকাস হাও না কেন Authentication & Authorization বোঝাটা must ।

একজন ক্লায়েন্ট এর জন্য প্রজেক্ট কর, কিংবা নিজের জন্য এপ্লিকেশন বানাও, এর ডাটা গুলোকে sucure রাখা এতটাই জরুরি যতটা দরকার হয় নিজের ব্যাংক ভোল্ড সেফ রাখা।

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

আমরা শুরুতে দেখব Authentication & Authorization এর মধ্যে পার্থক্য কি ? প্রোগ্রামিং জগতে পা রাখা প্রায় সব ডেভেলপাররাই শুরুর দিকে এই দুই ওয়ার্ড নিয়ে confused থাকে। তাই আগেই ক্লিয়ার করে নিতে চাই এই confusion ।

so,let's start with solve the conception:

#Authentication_&_Authorization:

আমরা আগেই দেখেছি authentication হচ্ছে একজন user অথবা সার্ভিসের আইডেন্টিটি confirmation, অন্যদিকে Authorization হচ্ছে ডেডিকেটেড প্রসেস, মানে একজন অথেন্টিকেটেড user কি কি actions অথবা সার্ভিস access করতে পারবে সেটি কন্ফার্ম করে । একটা সিস্টেম এর ইনফরমেশন security maintain করার জন্য এই দুই প্রসেস crucial রোল প্লে করে।

যদিও authentication and authorization শুনতে একই রকম শুনায়, তবে এদের মধ্যে সুক্ষ পার্থক্য আছে এবং এদের use পারপাস ভিন্ন।

তবে দুটোই সিস্টেম বা এপ্লিকেশন এর সিকিউরিটি ensure করে। তুমি authentication এবং authorization এই দুই প্রসেস এপলাই করার মাধ্যমে এপ্লিকেশন secure করতে পারো,একটি ছাড়া অন্যটি সিকিউরিটি vulnerabilities এর কারণ হতে পারে এবং ইনফরমেশন হ্যাক হওয়ার সম্ভাবনা থাকে।

#What_is_Authentication:

যখন তুমি কোন ওয়েবসাইট বা অনলাইন সার্ভিস ব্যবহার করতে চাও ,তোমাকে username and password দিতে হয় । বিহাইন্ড the সিন্ ,সিস্টেম তোমার দেয়া username এবং password চেক করে, তার ডাটাবেস বা স্টোর এ,এই রেকর্ড মজুদ আছে কিনা ? যদি ইনফরমেশন ম্যাচ করে তবে সিস্টেম বুঝে নেয় তুমি legitimate user এবং তোমাকে পরবর্তী কাজের জন্য সামনে আগাতে দেয়। In this scenario, সিস্টেম মনেকরে শুধু তুমিই তোমার স্পেসিফিক username and password জান তাই সহজেই access বা identity ভ্যারিফাইড করে ফেলে। তুমি username and password বা অন্য যে কোন উপায়ে সিস্টেম এ ঢুকতে পারলে এবং সিস্টেম জন্য তুমি কে এটাই Authentication ।

#What_is_Authorization:

মনেকর ,রাহিম ও করিম একটা রিসার্চ সেন্টার এ কাজ করে। রহিম হচ্ছে সাইন্টিস্ট এবং করিম হচ্ছে তার এসিস্টেন্ট। যখন তারা এই রিসার্চ সেন্টার এ জব পায় তাদের দুজনকেই একটা id দেয়াহয় যা দিয়ে তারা রিসার্চ সেন্টার এ ঢুকতে পারে। এবার ওই id এর মাধ্যমে তারা বিভিন্ন রিসোর্স এ যেতে পারে। রহিম প্রধান সায়েন্টিস্ট আর তাই সে সব জায়গায় তার ওই role এর জন্য acess পায় অন্যদিকে করিম যে হচ্ছে এসিস্টেন্ট তাই তার কিছু জায়গায় acess নেই সে তার id শো করে এবং id অনুযায়ী সে এসিস্টেন্স রোল প্লে করে তাই সেসব গুলি রিসোর্স এ access পায় না।

এই যে বিভিন্ন রোল অনুযায়ী আলাদা আলাদা এক্সেস কন্ট্রোল হচ্ছে এটাই authorization । এবার তোমায় যদি কেও জিজ্ঞাস করে , অথেন্টিকেশন ও অথোরিজাশন এর মধ্যে পার্থক্য কি সহজ ভাষায় বলে দিবা authentication মানে, আমি কে আর authorization মানে, আমি কি করতে পারি ।

List of Common Authentication Methods:

কিছু কমন অথেন্টিকেশন মেথড আছে আমরা নিচের আলোচায়নায় একবার দেখে নিব , এর মধ্যে কিছু আছে এফেক্টিভ কিছু আছে inefficient তবে এগুলি কমন ভাবে ব্যবহার হয়ে থাকে both ফ্রন্টএন্ড ও ব্যাকএন্ড এ :

  1. JWT Authentication: JWTএর পূর্ণরূপ হচ্ছে "JSON Web Token" । জেসন অবজেক্ট এর মাধ্যমে সেক্যুয়ারলি ইনফরমেশন এক্সচেঞ্জ করা হয় server এবং ক্লাইন্ট এর মধ্যে। আমরা জানি অথেন্টিকেশন মানে হচ্ছে আইডেন্টিটি ভেরিফিকেশন তাই JWT এর মাধ্যমে user তার ইনফরমেশন provide করে as জেসন অবজেক্ট।

  2. Token-based Authentication: যখন একজন ইউসার username এবং password এর মাধ্যমে লগইন করার চেষ্টা করে ,system check করে সেগুলি সঠিক কিনা । যদি সব ঠিক থাকে সিস্টেম একটা "token" জেনারেট করে । এই টোকেন হচ্ছে লাইক digital ID card যা প্রমান করে তুমি সিস্টেমের real user । এটা unique থাকে current login session এর উপর ভিত্তি করে। তোমাকে সব সময় website or app এ লগইন এর জন্য পাসওয়ার্ড দিতে হবে না । Instead,তুমি জাস্ট তোমার token (the digital ID card) সিস্টেম কে শো করবে এবং পরবর্তী প্রসেস এর জন্য acess পেয়ে যাবে।

  3. Session-based Authentication: আমরা যখন log করি কোন website or app এ ,server স্পেশাল প্লেস তৈরী করে আমার ইনফরমেশন মনে রাখার জন্ন্য এই place কে সার্ভার "session" নামে চিনে থাকে। তুমি মনেকরতে পার session as a room যেখানে তোমার নাম সহ স্টোর আছে library তে । এই রুমের মধ্যে সার্ভার তোমার নাম স্টোর করে যেন পরবর্তীতে তোমায় চিনতে পারে। আমরা যখন লগইন করি ,সার্ভার ওই রুম এর জন্য একটা key provide করে যেটাকে "session ID" বলে কিছুটা টিকেট এর মতো । তুমি যখনি প্রোফাইল দেখতে চাও কিংবা কমেন্ট করতেচাও তুমি তোমার session ID (the ticket) শো কর এবং সার্ভার তোমার room (session) খুঁজে বের করে ও লগইন করতে দেয়। যদি তুমি log out কর অথবা তোমার session expires (like your library ticket becoming invalid) হয় ,তখন তোমাকে পুনরায় log in করতে হবে এবং নতুন সেশন তৈরী হবে with new session ID.

  4. Basic Authentication: user বা ক্লায়েন্ট খুব সাধারণ ভাবে username এবং pasword এর মাধ্যমে অথেন্টিকেশন আইডিন্টিটিটি কনফার্ম করে ওয়েবসাইট বা ওয়েব সার্ভার এ acess নেয়ার জন্য। তবে বেসিক authantication সেনসেটিভ ইনফরমেশন প্রটেক্ট করার জন্য খুব সিকিউর মেথড না। বিশেষকরে এনক্ৰিপ্টেট না হলে এই অথেন্টিকেশন malicious act ঘটাতে পারে।

  5. OAuth - Open Authorization: login ক্রেডিনশিয়াল শেয়ার করা ছাড়াই থার্ট পার্টি প্লাটফর্ম এর মাধ্যমে এপ্লিকেশন ,সার্ভার বা ওয়েবসাইট এ acess করতে দেয়। মূলত OAuth হচ্ছে থার্ট পার্টি এপ্লিকেশন যারা স্পেসিয়াললি এক্সপার্ট অথেন্টিকেশন এর জন্য।

  6. SSO - Single Sign-On: এই সিস্টেমটি user দের একবার লগ করার সুযোগ দেয় ,পরবর্তীতে user মাল্টিপল রিলেটেড সিস্টেম ও সার্ভিস এ access করতে পারে without having to log in separately for each one । SSO - Single Sign-On সিস্টেম কিছুটা এমন ধর, তোমার কাছে মাস্টার key আছে তুমি ওই key দিয়ে অনেক গুলি দরজা খুলতে পার। বিভিন্ন organization এমপ্লয়ার দেড় বিভিন্ন সার্ভিস tool ব্যবহার করার জন্য এই মেথডapply করে থাকে। যেন, এমপ্লয়ার দেড় কম ঝামেলা পোহাতে হয়।

এগুলোই বহুল ব্যাবহৃত বেসিক অথেন্টিকেশন সার্ভিসেস। এর বাইরে আরো আছে তবে এগুলোই সব থেকে বেশি ব্যবহার হয়ে থাকে।

List of Common Authorization Methods:

নিচে কিছু কমন অথোরাইজেশন টেকনিক ও মেথড নিয়ে আলোচনা করছি ,এদের মধ্যে কিছু কিছু বিশেষ কেস এ ব্যবহার হয়। ডেভেলপমেন্ট actually ডিপেন্ট করে use case এর উপরে স্পেসিফিক ভাবে বলা কঠিন যে অমুক ভাল অমুখ খারাপ । একজন ডেভেলপার কে ডিসিশন মেক করেই তার ডেভেলপমেন্ট প্রসেস সম্পন্ন করতে হয় ,

  1. Role-Based Access Control (RBAC): এটি খুব কমনলি ব্যবহার করা মেথড যেখানে বলা থাকে কম্পিউটার সিস্টেম ,সার্ভার ,এপ্লিকেশন এ ,কে কি করতে পারবে তাদের রোল অনুযায়ী ।ধর ,একটা এপ্লিকেশন এর জন্য "Employee," "Manager," and "Administrator " এমন অনেক রোল হতে পারে। প্রত্যেক রোল এর জন্য কিছু স্পেসিফিক পারমিশন ,acess রাইট এসোসিয়েটেড থাকে। যেমন ,employ সে শুধু ডাটা দেখতে পারবে ,ম্যানেজার ডাটা দেখতে পারার সাথে সে edit করতে পারবে , Administrator সে ডাটা দেখা ,edit করা ও ডিলেট করা সব পারবে ।

  2. Attribute-Based Access Control (ABAC): ABAC মেথড ব্যবহার হয় কন্ট্রোল access যেমন সিস্টেম ,এপ্লিকেশন অথবা ডাটার ক্ষেত্রে। কিন্তু এটি ফ্ল্যাক্সিঅবল কারণ একাউন্ট এর বিভিন্ন attribute ডিটারমাইন করা থাকে যেমন ,user details, resource information,এবং environmental factors । ABAC access পলিছি create হয় attiribut বেস করে, For example, a policy might state that "Users with a 'Manager' role can access 'Confidential Documents' if their location attribute is 'Office'.

user_attributes = {
    "role": "Manager",
    "location": "Office",
    "department": "HR"
}
  1. OAuth (Open Authorization): OAuth primarily একটি authorization framework ।এটি third-party application যা user এর credentials এক্সপোস না করে সিস্টেম এ access দিয়ে থাকে । token এর মাধ্যমে মূলত authorization access কন্ট্রোল করে ।

  2. JSON Web Tokens (JWT): Claims নামে টোকেন এর মাধ্যমে কিছু স্টেটমেন্ট তৈরী করে যা ডিটারমাইন করে কিছু স্পেসিফিক থিং। যেমন, JWT claim করে : "This user has the role of 'Admin' and can access 'Admin Panel' ।

  3. Access Control Lists (ACLs): এক্সেস কন্ট্রোল লিস্ট, যা ACL নাম পরিচিত। এটি মূলত একটি permission এর লিস্ট অবজেক্ট আকারে থাকে । কম্পিউটিং প্রণালীতে file, folder, network resource ,অথবা device যে কোন কিছুই অবজেক্ট হতে পারে যাকে আমরা কন্ট্রোল করতে চাইব।

#Conclusion:

আশাকরি উপরের আলোচনা থেকে একটা ক্লিয়ার আইডিয়া হয়ে গেছে authentication ও authorization সম্পর্কে। পরবর্তী চ্যাপ্টার এ আমরা আরো ডিটেলস আলোচনা এ নিয়ে করব।

তবে তার আগে :

💡
লেখা ভালো লাগলে কমেন্ট ,শেয়ার ও ফিডব্যাক দিতে ভুল না। লেখার ইমপ্রুভমেন্ট এর জন্য ফিডব্যাক আমায় খুব হেল্প করে। তোমার মতামত আমার কাছে মূল্যবান।

#readToLearnWeb #javascript #nodejs #mearn