Authentication শুধু পাসওয়ার্ড যাচাই করা নয়—এটি ইউজার আইডেন্টিটি নিরাপদভাবে ম্যানেজ করা, সেশন, টোকেন, রোলস, এবং পারমিশন নিয়ন্ত্রণ করার প্রক্রিয়া।
| কনসেপ্ট | সংজ্ঞা | Express.js উদাহরণ |
|---|---|---|
| Authentication | ইউজার কে তা যাচাই করা | ইমেইল & পাসওয়ার্ড দিয়ে লগইন, OAuth লগইন |
| Authorization | ইউজার কী করতে পারবে তা নির্ধারণ | ইউজার কি 'admin' রোল পেয়েছে /admin অ্যাক্সেসের জন্য |
মনে রাখবেন: Authentication সর্বদা Authorization-এর আগে হয়।
- সার্ভার লগইন করা ইউজারদের ট্র্যাক রাখে।
- সার্ভার-সাইড স্টোরেজ ব্যবহার করে: memory, database, Redis।
- Workflow:
- ইউজার লগইন করে।
- সার্ভার একটি session ID তৈরি করে এবং স্টোরেজে রাখে।
- ক্লায়েন্টকে cookie পাঠায় session ID সহ।
- ক্লায়েন্ট প্রতিটি request-এ cookie পাঠায়।
- সার্ভার session ID যাচাই করে → access দেয়।
Pros:
- সহজে ইমপ্লিমেন্ট করা যায়।
- Sessions যেকোন সময় invalidate করা যায়।
Cons:
- API বা microservices-এ স্কেল করা কঠিন যদি session storage share না হয়।
Express প্যাকেজ উদাহরণ: express-session, connect-mongo, connect-redis
- সার্ভার session রাখে না; সব তথ্য টোকেনে এনকোড করা থাকে (সাধারণত JWT)।
- Workflow:
- ইউজার লগইন করে।
- সার্ভার JWT তৈরি করে এবং সিক্রেট/প্রাইভেট কী দিয়ে sign করে।
- ক্লায়েন্ট টোকেন রাখে (cookie বা localStorage)।
- ক্লায়েন্ট প্রতিটি request-এ Authorization header পাঠায়।
- সার্ভার টোকেন যাচাই করে → access দেয়।
Pros:
- Stateless → সহজে স্কেল করা যায়।
- SPA বা মোবাইল অ্যাপের জন্য উপযুক্ত।
Cons:
- JWT সাধারণত expire না হওয়া পর্যন্ত invalidate করা যায় না।
- Token blacklist ব্যবহার করতে হবে যদি revoke করতে চাই।
- ইউজারের authentication delegated হয় providers: Google, Facebook, GitHub।
- ব্যবহার হয় OAuth2 টোকেন।
- Express middleware উদাহরণ:
passport-google-oauth20।
Workflow:
- ইউজার “Login with Google” ক্লিক করে।
- ইউজার Google login page এ redirect হয়।
- Google redirect করে সার্ভারে code নিয়ে।
- সার্ভার code exchange করে access token → optionally local user তৈরি করে।
কখনো পাসওয়ার্ড plain text এ সংরক্ষণ করবেন না।
Best practices:
- Hash passwords: bcrypt, scrypt, argon2 ব্যবহার করুন।
- Salt ব্যবহার করুন rainbow table attack থেকে রক্ষা পেতে।
- Pepper ব্যবহার করুন: server secret string পাসওয়ার্ডের সাথে অ্যাপেন্ড করে হ্যাশ করা।
import bcrypt from "bcryptjs";
const hashPassword = async (password) => {
const salt = await bcrypt.genSalt(12); // 12 rounds
return await bcrypt.hash(password, salt);
};JWT = JSON Web Token, একটি Stateless authentication পদ্ধতি।
Structure:
Header.Payload.Signature
- Header:
{ "alg": "HS256", "typ": "JWT" } - Payload:
{ "id": "userId", "role": "admin" } - Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Advantages:
- Stateless → সহজে স্কেল করা যায়।
- Payload-এ রোলস এবং permissions রাখা যায়।
- API, SPA, microservices-এ ব্যবহারযোগ্য।
Disadvantages:
- Expire না হওয়া পর্যন্ত revoke করা যায় না।
- Secret leak হলে সব token compromised।
- সবসময় HTTPS ব্যবহার করতে হবে।
Best Practices:
- Short-lived tokens (5–15 min)
- Refresh tokens ব্যবহার করুন long sessions এর জন্য
- HTTP-only cookie-তে token রাখুন XSS থেকে রক্ষা করতে
- প্রতিটি request-এ signature validate করুন
Middleware প্যাটার্ন:
import jwt from "jsonwebtoken";
export const authenticate = (roles = []) => (req, res, next) => {
const token = req.cookies.token || req.header("Authorization")?.replace("Bearer ", "");
if (!token) return res.status(401).json({ message: "No token provided" });
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
if (roles.length && !roles.includes(decoded.role))
return res.status(403).json({ message: "Forbidden" });
next();
} catch (err) {
return res.status(401).json({ message: "Invalid token" });
}
};ব্যাখ্যা:
rolesparameter দিয়ে authorization করা যায়।- Middleware token existence, validity এবং role যাচাই করে।
সমস্যা: JWT খুব দ্রুত expire হয় → ইউজারকে বারবার লগইন করতে হয়। সমাধান: Refresh tokens
- Access token → short-lived (5–15 min)
- Refresh token → long-lived (7–30 days)
Workflow:
- Access token expire হলে → client refresh token পাঠায় → সার্ভার validate করে → নতুন access token ইস্যু করে।
- Refresh token নিরাপদে সংরক্ষণ করুন (HTTP-only cookie বা DB)
// /token route
router.post("/token", async (req, res) => {
const refreshToken = req.cookies.refreshToken;
if (!refreshToken) return res.status(401).json({ message: "No refresh token" });
try {
const decoded = jwt.verify(refreshToken, process.env.REFRESH_SECRET);
const newAccessToken = jwt.sign({ id: decoded.id }, process.env.JWT_SECRET, { expiresIn: "15m" });
res.cookie("token", newAccessToken, { httpOnly: true });
res.json({ accessToken: newAccessToken });
} catch (err) {
res.status(401).json({ message: "Invalid refresh token" });
}
});- অতিরিক্ত security layer।
- উদাহরণ: login করার পরে OTP verification।
- প্যাকেজ:
speakeasy(TOTP),nodemailer(email),twilio(SMS)
Workflow:
- পাসওয়ার্ড দিয়ে login
- সার্ভার TOTP generate করে পাঠায় ইউজারকে
- ইউজার OTP submit করে
- সার্ভার verify করে → session/token ইস্যু করে
- সবসময় password hash করুন, plain text রাখবেন না।
- HTTPS ব্যবহার করুন MITM attack থেকে রক্ষা পেতে।
- HTTP-only cookies → XSS থেকে JWT রক্ষা।
- CSRF protection → cookie ভিত্তিক auth এর জন্য।
- Login endpoints rate-limit করুন → brute force prevent করতে।
- Error messages কম তথ্যযুক্ত রাখুন → attackers ইউজার ইমেইল না জানতে পারে।
- Multiple failed attempts → account lock বা CAPTCHA।
- helmet.js ব্যবহার করুন Express-এ secure headers সেট করতে।
| Scenario | Recommended Approach |
|---|---|
| Traditional web app | Session-based + cookie |
| SPA (React, Vue) | JWT + HTTP-only cookie |
| API for mobile app | JWT + refresh token |
| Multi-role app | JWT + roles + middleware |
| Social login | OAuth2 + JWT/session |
| High-security app | MFA + short-lived tokens + monitoring |
/project
/models
User.js
/routes
auth.js
user.js
/middleware
auth.js
server.js
config.js
User.js→ user schema, password hashingauth.js→ login, register, refresh token, logoutuser.js→ protected routes (dashboard, profile)middleware/auth.js→ verify token + rolesserver.js→ main Express app setup
Express.js Authentication multi-layered:
- User identity verification → password/email, OAuth, token
- Session বা token storage → stateful vs stateless
- Route protection → middleware identity & role যাচাই
- Advanced features → refresh tokens, MFA, rate limiting
- Security best practices → password hashing, HTTPS, CSRF, XSS prevention
এই গভীর বিশ্লেষণের মাধ্যমে আপনি জানেন Authentication কিভাবে কাজ করে, Express.js-এ এটি নিরাপদভাবে কিভাবে ইমপ্লিমেন্ট করবেন, এবং রিয়েল-ওয়ার্ল্ড ইউজকেসগুলো কেমন হবে।