Laravel Security
Laravel User Authentication and Authorization
Laravel Framework এ Authentication কি?
Laravel-এ, User Authentication বলতে এমন ইউজারের পরিচয় যাচাই করার প্রক্রিয়া বোঝায় যাকে একটি ওয়েব অ্যাপ্লিকেশনের নির্দিষ্ট অংশ অ্যাক্সেস করার বা নির্দিষ্ট ক্রিয়া সম্পাদন করার অনুমোদন দেওয়া হয়েছে। এটি কেবলমাত্র অনুমোদিত ইউজাররা সুরক্ষিত রিসোর্সে অ্যাক্সেস করতে বা সংবেদনশীল অপারেশন্স সম্পাদন করতে পারে তা নিশ্চিত করার জন্য এটি ওয়েব অ্যাপ্লিকেশন ডেভপমেন্টের একটি গুরুত্বপূর্ণ পদক্ষেপ।
লারাভেলের authentication process এ কি ধরণের কাজ হয়?
Laravel একটি robust authentication system সরবরাহ করে যা ডেভেলপারদের secure user authentication সুবিধা বাস্তবায়ন করা সহজ করে তোলে। authentication process সাধারণত নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত থাকে:
- User Registration:
- User Login:
- Authentication Middleware:
- Session Management:
- Password Hashing:
- Remember Me Functionality:
- Authentication Guards:
ইউজাররা username, email এবং password এর মতো প্রয়োজনীয় তথ্য প্রদান করে একটি অ্যাকাউন্ট তৈরি করতে পারে। লারাভেল user registration এবং validation হ্যান্ডেল করার জন্য অনেকগুলো built-in method এবং views প্রোভাইড করে।
একবার রেজিস্টার্ড হলে, ইউজাররা তাদের ক্রেডেনটিয়ালস (সাধারণত ইমেল এবং পাসওয়ার্ড) ব্যবহার করে লগ ইন করতে পারেন। Laravel লগইন ক্রেডেনটিয়ালস এর ভ্যালিডেশন হ্যান্ডেল করে এবং অথেন্টিক ইউজারদের জন্য প্রয়োজনীয় প্রক্রিয়া প্রোভাইড করে।
Laravel Framework তার authentication system হ্যান্ডেল করার জন্য middleware ফীচার ব্যবহার করে। middleware টি একটি ফিল্টার হিসাবে কাজ করে যা নির্দিষ্ট routes বা resources গুলিতে অ্যাক্সেস দেওয়ার আগে ব্যবহারকারীকে authenticated করা হয়েছে কিনা তা পরীক্ষা করে। লারাভেলের সাথে বাই-ডিফল্ট ভাবে থাকা auth middleware টি অথেনটিকেশন এর প্রয়োজনে এমন routes গুলিকে রক্ষা করতে ব্যবহৃত হয়।
Laravel বিভিন্ন requests জুড়ে authenticated ইউজারদের ট্র্যাক রাখতে ইউজারের সেশন হ্যান্ডেল করে। এটি ইউজারদের সনাক্ত করতে সেশন কুকিজ ব্যবহার করে এবং তারা স্পষ্টভাবে লগ আউট না হওয়া পর্যন্ত তাদের authenticated থাকার অনুমতি দেয়।
লারাভেল স্বয়ংক্রিয়ভাবে ইউজারদের পাসওয়ার্ডগুলিকে Hash করে এবং সল্ট করে, এবং নিশ্চিত করে যে পাসওয়ার্ডগুলি ডাটাবেসে নিরাপদে সংরক্ষণ করা হয়েছে। এটি সংবেদনশীল তথ্য প্রকাশ করা থেকে বাধা দেয় এমনকি যদি ডাটাবেসকে কোনোভাবে হ্যাক ও করা হয়।
Laravel “Member Me” ফাঙ্কশনালিটি সাপোর্ট করে, ইউজারদের ব্রাউজার বন্ধ এবং পুনরায় খোলার পরেও লগ ইন থাকতে দেয়। এটি দীর্ঘস্থায়ী কুকিজের মাধ্যমে অর্জন করা হয়।
লারাভেল multiple authentication guards support করে, যা আপনাকে web sessions, API টোকেন ইত্যাদির মতো বিভিন্ন মানদণ্ডের উপর ভিত্তি করে ইউজারদের অথেন্টিকেট করতে দেয়। default guard সাধারণত web authentication জন্য সেট আপ করা হয়।
Laravel Framework এ Authentication type গুলো কি?
লারাভেলে, আপনার অ্যাপ্লিকেশনের প্রয়োজনের উপর ভিত্তি করে আপনি প্রয়োগ করতে পারেন এমন বিভিন্ন ধরণের authentication রয়েছে। Laravel এ বিদ্যমান বিভিন্ন ধরনের প্রমাণীকরণ গুলো হলো নিম্নরূপ:
- Session-based Authentication:
- Token-based Authentication:
- Social Authentication:
- Two-Factor Authentication (2FA):
- Multi-Factor Authentication (MFA):
- OAuth2 Authentication:
- API Token Authentication:
- LDAP Authentication:
এটি ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত ডিফল্ট এবং সবচেয়ে কমন ধরনের authentication. এটি ইউজারদের authenticate করার জন্য PHP sessions এবং cookies এর উপর নির্ভর করে। যখন একজন ইউজার লগ ইন করেন, তখন একটি সেশন তৈরি হয় এবং একটি সেশন কুকি ইউজারের ব্রাউজারে সংরক্ষণ করা হয়। সেশনের মেয়াদ শেষ না হওয়া পর্যন্ত বা তারা ম্যানুয়ালি লগ আউট না হওয়া পর্যন্ত ইউজার authenticated থাকে। Laravel Session-based Authentication বাস্তবায়নের জন্য Laravel UI, Breeze এবং Jetstream ব্যবহার করে।
Token-based authentication সাধারণত API এবং stateless অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়। এটি অথেন্টিকেটেড ইউজারদের টোকেন (সাধারণত JSON ওয়েব টোকেন – JWT) প্রদানের সাথে জড়িত। এই টোকেনগুলি একটি অথেনটিকেশন মেকানিজম হিসাবে প্রতিটি পরবর্তী রিকোয়েস্টের সাথে পাঠানো হয়। Laravel token-based authentication বাস্তবায়নের জন্য Laravel Sanctum এবং Laravel Passport এর মত প্যাকেজ প্রদান করে।
এই মুহূর্তে Laravel Framework শুধুমাত্র Socialite package ব্যবহার করে বিভিন্ন ধরণের social media authentication গুলো বাস্তবায়ন করতে দেয়। এই ধরনের authentication ইউজারদের তাদের Facebook, Google, Twitter, GitHub ইত্যাদির মতো social media account গুলো ব্যবহার করে আপনার অ্যাপ্লিকেশনে লগ ইন করতে সক্ষম করে।
Two-Factor Authentication লগইন প্রক্রিয়ায় নিরাপত্তার একটি অতিরিক্ত স্তর যোগ করে। এখানে সাধারণ email/password ছাড়াও, ইউজারদের লগইনের সময় অবশ্যই একটি দ্বিতীয় অথেনটিকেশন কোড প্রদান করতে হয়, যেমন তাদের ফোনে পাঠানো one-time code বা একটি authenticator app দ্বারা তৈরি করা কোড। Laravel Two-Factor Authentication (2FA) বাস্তবায়নের জন্য Laravel Fortify ব্যবহার করে। আর এই Laravel Fortify authentication package টি Breeze এবং Jetstream দুটিতে ব্যবহার করা হয়েছে। যার ফলে Breeze এবং Jetstream প্যাকেজ দুটি বিল্ট-ইন two-factor authentication সাপোর্ট করে।
Multi-Factor Authentication 2FA-এর মতোই। তবে এটি ইউজারদেরকে দুটির বেশি factors এর সাথে authenticate করতে দেয়। এটি ইউজারের জানা কিছু (পাসওয়ার্ড), ইউজারের কাছে থাকা কিছু (ফোন বা হার্ডওয়্যার টোকেন) এবং ইউজারের কিছু (বায়োমেট্রিক তথ্য) একত্রিত করতে পারে। Laravel Fortify প্যাকেজটি Multi-Factor Authentication (MFA) ও সাপোর্ট করে।
OAuth2 হল একটি জনপ্রিয় authorization framework যা ইউজারদের তাদের credential গুলি শেয়ার না করেই তাদের রিসৌর্স গুলিতে সীমিত অ্যাক্সেস প্রদান করতে সক্ষম করে৷ Laravel Passport আপনার Laravel অ্যাপ্লিকেশনে OAuth2-ভিত্তিক authentication বাস্তবায়নের জন্য সাপোর্ট প্রদান করে।
OAuth2 ছাড়াও, Laravel Sanctum এবং অন্যান্য প্যাকেজগুলি আপনাকে API token authentication বাস্তবায়নের সুযোগ দেয়। ইউজারদেরদেরকে API টোকেন জারি করা হয় যা ইউজারকে authenticate করার জন্য প্রতিটি API রিকোয়েস্টের সাথে পাঠানো হয়।
যদি আপনার অ্যাপ্লিকেশনে ইউজার ম্যানেজমেন্টের জন্য LDAP (Lightweight Directory Access Protocol) ব্যবহার করে, তাহলে Laravel LDAP authentication সাপোর্ট করে, যা আপনাকে LDAP সার্ভারের বিপরীতে ইউজারদের authenticate করতে দেয়।
আপনার অ্যাপ্লিকেশনের প্রকৃতি, এর নিরাপত্তার প্রয়োজনীয়তা এবং আপনি যে প্ল্যাটফর্মগুলিকে সাপোর্ট করার পরিকল্পনা করছেন (web, mobile, API, ইত্যাদি) তার উপর নির্ভর করে উপযুক্ত ধরনের authentication system পছন্দ করা অপরিহার্য। Laravel একটি ফ্লেক্সিবল এবং কাস্টমাইজযোগ্য authentication system সরবরাহ করে যা আপনাকে বিভিন্ন authentication methods প্রয়োগ করতে এবং প্রয়োজন অনুসারে তাদের একত্রিত করতে দেয়।
Laravel Framework এ Authorization কি?
Laravel Framework এ Authorization বলতে একজন ইউজারকে একটি নির্দিষ্ট ক্রিয়া সম্পাদন করতে বা একটি ওয়েব অ্যাপ্লিকেশনের মধ্যে নির্দিষ্ট resource গুলি অ্যাক্সেস করার অনুমতি দেওয়া হয়েছে কিনা তা নির্ধারণের প্রক্রিয়াকে বোঝায়। যেখানে authentication একটি ইউজারের পরিচয় যাচাই করার উপর ফোকাস করে, অন্যদিকে authorization ইউজারের আইডেন্টিটি এবং রোলস এর উপর ভিত্তি করে পারমিশন প্রদান বা ডিনাই করে।
সহজ কথায়, একজন ইউজারের পরিচয় নিশ্চিত হওয়ার পর , Laravel-এর authorization system পরীক্ষা করে যে সেই পরিচয় নিশ্চিত হওয়া ইউজারের (authenticated user) কাছে একটি নির্দিষ্ট কাজ সম্পাদন করার বা অ্যাপ্লিকেশনের নির্দিষ্ট অংশগুলি দেখার প্রয়োজনীয় অনুমতি আছে কিনা।
লারাভেল একটি শক্তিশালী এবং ফ্লেক্সিবল authorization system সরবরাহ করে যা এর authentication features গুলির সাথে নির্বিঘ্নে কাজ করে। লারাভেলে, প্রধানত দুটি ধরণের authorization রয়েছে:
- Gate-based Authorization:
- Policy-based Authorization:
লারাভেলে Gate-based authorization আপনাকে “gates” ব্যবহার করে authorization logic ডিফাইন করতে দেয় যা মূলত কলব্যাক ফাংশন যা নির্ধারণ করে যে ইউজার একটি নির্দিষ্ট ক্রিয়া সম্পাদনের জন্য অনুমোদিত কিনা। gates হল আরো general authorization checks যা নির্দিষ্ট মডেলের উপর নির্ভর করে না। এগুলি সাধারণত AuthServiceProvider ক্লাসে ডিফাইন করা থাকে।
লারাভেলে Policy-based authorization আপনাকে “policy” ব্যবহার করে authorization rules গুলিকে ডিফাইন করতে দেয় যা PHP ক্লাস যা নির্দিষ্ট মডেলগুলিতে অ্যাকশন অনুমোদনের rules গুলি নির্দিষ্ট করে৷ Policy গুলি সাধারণত app/Policies ডিরেক্টরিতে সংরক্ষণ করা হয়।
সংক্ষেপে, authentication হল একজন ইউজারের পরিচয় নিশ্চিত করার প্রক্রিয়া, আর authorization হল কোন কাজ এবং রিসৌর্স গুলি যা authenticated user কে অ্যাক্সেস করার অনুমতি দেওয়া হয়েছে তা নির্ধারণ করার প্রক্রিয়া। একত্রে, তারা ওয়েব অ্যাপ্লিকেশনগুলিকে সুরক্ষিত করতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, এটি নিশ্চিত করে যে শুধুমাত্র উপযুক্ত অনুমতি সহ authenticated ইউজার রা সিস্টেমের বিভিন্ন অংশের সাথে যোগাযোগ করতে পারে। লারাভেল এই দিকগুলিকে দক্ষতার সাথে পরিচালনা করার জন্য একটি সুসংহত authentication এবং authorization system প্রদান করে।