API নিরাপত্তা (security) এবং ব্যবহারকারী প্রমাণীকরণ (authentication) কোনো ওয়েব অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। ExpressJS-এ API authentication ও security ব্যবস্থা তৈরি করার জন্য কয়েকটি সাধারণ পদ্ধতি ও লাইব্রেরি ব্যবহার করা হয়। এখানে আমরা JWT (JSON Web Token) এবং Passport.js ব্যবহার করে API authentication এবং ExpressJS-এ বিভিন্ন নিরাপত্তা ব্যবস্থা আলোচনা করব।
১. API Authentication
API authentication সাধারণত ব্যবহারকারীদের একটি সিস্টেমে প্রবেশাধিকার (access) প্রদান করার জন্য ব্যবহৃত হয়। ExpressJS-এ API authentication-এর জন্য প্রধান দুটি পদ্ধতি ব্যবহার করা হয়:
- Session-based Authentication
- Token-based Authentication (যেমন JWT)
১.১. Token-based Authentication (JWT)
JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি সিস্টেমের মধ্যে নিরাপদ তথ্য ট্রান্সফার করতে ব্যবহৃত হয়। ExpressJS-এ JWT ব্যবহার করে API authentication-এর প্রক্রিয়া খুবই জনপ্রিয় এবং নিরাপদ।
১.১.১. JWT ইনস্টল করা
JWT ব্যবহার করতে হলে প্রথমে jsonwebtoken প্যাকেজ ইনস্টল করতে হবে:
npm install jsonwebtoken
১.১.২. JWT এর মাধ্যমে Authentication প্রক্রিয়া
ExpressJS-এ JWT এর মাধ্যমে API authentication এর উদাহরণ:
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
// Secret key
const secretKey = 'mysecretkey';
// Dummy user data
const users = [
{ id: 1, username: 'user1', password: 'password1' },
{ id: 2, username: 'user2', password: 'password2' }
];
// লগইন রাউট - JWT টোকেন জেনারেট করা
app.post('/login', (req, res) => {
const { username, password } = req.body;
// ইউজার যাচাই
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(401).send('Invalid credentials');
}
// JWT টোকেন তৈরি
const token = jwt.sign({ userId: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
res.json({ token });
});
// Middleware to verify JWT token
function authenticateToken(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Access Denied');
}
jwt.verify(token, secretKey, (err, user) => {
if (err) {
return res.status(403).send('Invalid token');
}
req.user = user;
next();
});
}
// প্রোটেক্টেড রাউট
app.get('/protected', authenticateToken, (req, res) => {
res.send(`Hello ${req.user.username}, you have access to this route.`);
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
- login route: ব্যবহারকারীর সঠিক username এবং password যাচাই করা হয়। সফল হলে JWT টোকেন তৈরি করা হয় এবং সেটি ক্লায়েন্টকে ফেরত পাঠানো হয়।
- authenticateToken middleware: এটি JWT টোকেন যাচাই করে এবং রিকোয়েস্টের সাথে প্রাপ্ত টোকেনটি সঠিক না হলে অ্যাক্সেস রোধ করে।
- protected route: এই রাউটটি শুধুমাত্র প্রমাণীকৃত ব্যবহারকারীদের জন্য উন্মুক্ত।
২. API Security ব্যবস্থা
API নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি পাবলিক বা সেনসিটিভ ডেটা নিয়ে কাজ করছেন। ExpressJS-এ API security এর জন্য কিছু গুরুত্বপূর্ণ ব্যবস্থা নিতে হবে।
২.১. HTTPS ব্যবহার করা
একটি নিরাপদ API জন্য HTTPS (HyperText Transfer Protocol Secure) ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটা এনক্রিপ্ট করে পাঠানোর মাধ্যমে মধ্যবর্তী আক্রমণ (man-in-the-middle attacks) রোধ করে।
২.১.১. HTTPS সেটআপ করা
ExpressJS-এ HTTPS চালু করতে ssl certificates প্রয়োজন হয়। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync('path/to/your/private.key'),
cert: fs.readFileSync('path/to/your/certificate.crt')
};
app.get('/', (req, res) => {
res.send('This is a secure connection');
});
https.createServer(options, app).listen(3000, () => {
console.log('Server is running on https://localhost:3000');
});
২.২. CORS (Cross-Origin Resource Sharing) সুরক্ষা
যখন আপনার API ভিন্ন ডোমেইন থেকে অ্যাক্সেস করা হয়, তখন CORS পলিসি সেট করা গুরুত্বপূর্ণ। CORS হল একটি নিরাপত্তা ফিচার যা ব্রাউজারকে বাধ্য করে শুধুমাত্র অনুমোদিত উৎস থেকে রিকোয়েস্ট গ্রহণ করতে।
২.২.১. CORS সেটআপ করা
CORS হ্যান্ডলিংয়ের জন্য cors প্যাকেজ ব্যবহার করা হয়।
npm install cors
ExpressJS-এ CORS সেটআপ করার উদাহরণ:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({
origin: 'http://example.com' // শুধুমাত্র এই ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করবে
}));
app.get('/', (req, res) => {
res.send('CORS is enabled');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
২.৩. Helmet ব্যবহার করা
Helmet প্যাকেজটি আপনার ExpressJS অ্যাপ্লিকেশনকে বিভিন্ন ধরনের নিরাপত্তা হুমকি থেকে রক্ষা করতে সাহায্য করে, যেমনঃ XSS attacks, clickjacking, content security policy ইত্যাদি।
২.৩.১. Helmet ইনস্টল এবং ব্যবহার
npm install helmet
const express = require('express');
const helmet = require('helmet');
const app = express();
// Helmet middleware ব্যবহার
app.use(helmet());
app.get('/', (req, res) => {
res.send('Helmet is helping to secure this app');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
২.৪. Rate Limiting
Rate limiting হলো একটি নিরাপত্তা ব্যবস্থা যা API-তে খুব বেশি রিকোয়েস্ট আসা রোধ করে, যেটি ডস (DoS) আক্রমণ (Denial of Service attacks) থেকে রক্ষা করে।
২.৪.১. Rate limiting সেটআপ করা
express-rate-limit প্যাকেজ ব্যবহার করে rate limiting সেটআপ করা যেতে পারে।
npm install express-rate-limit
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// রেট লিমিটার সেটআপ
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 মিনিট
max: 100, // প্রতি 15 মিনিটে 100 রিকোয়েস্ট
message: 'Too many requests, please try again later.'
});
app.use(limiter);
app.get('/', (req, res) => {
res.send('Rate limiting applied');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
সারাংশ
ExpressJS-এ API authentication এবং security ব্যবস্থা তৈরি করতে JWT, Passport.js, Helmet, CORS, এবং Rate limiting ব্যবহার করা হয়। JWT ব্যবহার করে token-based authentication সিস্টেমটি কার্যকরভাবে বাস্তবায়ন করা সম্ভব, যেখানে ব্যবহারকারীদের সুরক্ষিতভাবে API অ্যাক্সেস দেওয়া হয়। এছাড়া, HTTPS, CORS, Helmet এবং Rate limiting এর মাধ্যমে আপনার API-এর নিরাপত্তা নিশ্চিত করা যায়। ExpressJS এর সাহায্যে এই নিরাপত্তা ব্যবস্থা ব্যবহার করে আপনার অ্যাপ্লিকেশনকে নিরাপদ এবং সুরক্ষিত রাখা সম্ভব।
Read more