API প্রমাণীকরণ কি?
API প্রমাণীকরণ হল আপনার Node.js API-এ অ্যাক্সেস করা ক্লায়েন্টদের পরিচয় যাচাই করার প্রক্রিয়া।
আপনার Node.js অ্যাপ্লিকেশনগুলিকে কার্যকরভাবে সুরক্ষিত করতে সহায়তা করার জন্য এই বিস্তৃত নির্দেশিকাটি বিভিন্ন প্রমাণীকরণ পদ্ধতি, নিরাপত্তার সর্বোত্তম অনুশীলন এবং বাস্তবায়নের ধরণগুলিকে কভার করে৷
কেন API প্রমাণীকরণ গুরুত্বপূর্ণ
আজকের সংযুক্ত বিশ্বে, API নিরাপত্তা ঐচ্ছিক নয়-এটি একটি প্রয়োজনীয়তা। সঠিক প্রমাণীকরণ আপনাকে সাহায্য করে:
নিরাপত্তা সুবিধা
- অ্যাক্সেস নিয়ন্ত্রণ:শুধুমাত্র অনুমোদিত ব্যবহারকারীদের জন্য API অ্যাক্সেস সীমাবদ্ধ করুন
- ডেটা সুরক্ষা:অননুমোদিত অ্যাক্সেস থেকে সংবেদনশীল তথ্য রক্ষা করুন
- পরিচয় যাচাইকরণ:যাচাই করুন যে ব্যবহারকারীরা তারা যা বলে তারা তারা
ব্যবসায়িক সুবিধা
- ব্যবহার বিশ্লেষণ:ব্যবহারকারী/অ্যাপ্লিকেশন দ্বারা API ব্যবহার ট্র্যাক করুন
- নগদীকরণ:ব্যবহার-ভিত্তিক বিলিং মডেল বাস্তবায়ন করুন
- সামঞ্জস্যতা:নিয়ন্ত্রক প্রয়োজনীয়তা পূরণ করুন (GDPR, HIPAA, ইত্যাদি)
প্রমাণীকরণ পদ্ধতি ওভারভিউ
বিভিন্ন প্রমাণীকরণ পদ্ধতি বিভিন্ন ব্যবহারের ক্ষেত্রে পরিবেশন করে। এখানে একটি দ্রুত তুলনা:
| পদ্ধতি | সেরা | জটিলতা | নিরাপত্তা স্তর |
|---|---|---|---|
| Session-Based | ঐতিহ্যগত ওয়েব অ্যাপ্লিকেশন | কম | মাঝারি |
| JWT (Token-Based) | এসপিএ, মোবাইল অ্যাপ্লিকেশন | মাঝারি | আরো |
| API Keys | সার্ভার থেকে সার্ভার | কম | নিম্ন-মাঝারি |
| OAuth 2.0 | তৃতীয় পক্ষের অ্যাক্সেস | আরো | অনেক উঁচুতে |
সেশন-ভিত্তিক প্রমাণীকরণ
সেশন-ভিত্তিক প্রমাণীকরণ ব্যবহারকারীর অবস্থা বজায় রাখতে কুকিজ ব্যবহার করে:
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const app = express();
// Parse request bodies
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Configure sessions
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV === 'production', maxAge: 24 * 60 * 60 * 1000 } // 24 hours
}));
// Sample user database
const users = [
{ id: 1, username: 'user1', password: 'password1' }
];
// Login route
app.post('/login', (req, res) => {
const { username, password } = req.body;
// Find user
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(401).json({ message: 'Invalid credentials' });
}
// Store user information in session (excluding password)
req.session.user = {
id: user.id,
username: user.username
};
res.json({ message: 'Login successful', user: req.session.user });
});
// Protected route
app.get('/profile', (req, res) => {
// Check if user is logged in
if (!req.session.user) {
return res.status(401).json({ message: 'Unauthorized' });
}
res.json({ message: 'Profile accessed', user: req.session.user });
});
// Logout route
app.post('/logout', (req, res) => {
// Destroy session
req.session.destroy((err) => {
if (err) {
return res.status(500).json({ message: 'Logout failed' });
}
res.json({ message: 'Logout successful' });
});
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
টোকেন-ভিত্তিক প্রমাণীকরণ (JWT)
JSON ওয়েব টোকেন (JWT) একটি রাষ্ট্রহীন প্রমাণীকরণ প্রক্রিয়া প্রদান করে যা কম্প্যাক্ট এবং স্বয়ংসম্পূর্ণ।
সেশন-ভিত্তিক প্রমাণীকরণের বিপরীতে, টোকেন-ভিত্তিক প্রমাণীকরণের (JWT) সেশন ডেটা সঞ্চয় করার জন্য সার্ভারের প্রয়োজন হয় না।
এটি স্টেটলেস API আর্কিটেকচার এবং মাইক্রোসার্ভিসের জন্য উপযুক্ত।
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
const JWT_SECRET = 'your-jwt-secret-key';
// Sample user database
const users = [
{ id: 1, username: 'user1', password: 'password1', role: 'user' }
];
// Login route - generate token
app.post('/login', (req, res) => {
const { username, password } = req.body;
// Find user
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(401).json({ message: 'Invalid credentials' });
}
// Create payload for JWT
const payload = {
id: user.id,
username: user.username,
role: user.role
};
// Sign token
const token = jwt.sign(payload, JWT_SECRET, { expiresIn: '1h' });
res.json({ message: 'Login successful', token });
});
// Middleware for JWT verification
const authenticateJWT = (req, res, next) => {
// Get auth header - The Authorization header is commonly used to send authentication tokens
const authHeader = req.headers.authorization;
if (!authHeader) {
return res.status(401).json({ message: 'Authorization header missing' });
}
// Extract token from "Bearer "
const token = authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ message: 'Token missing' });
}
try {
// Verify token
const decoded = jwt.verify(token, JWT_SECRET);
// Attach user to request
req.user = decoded;
next();
} catch (error) {
return res.status(403).json({ message: 'Invalid or expired token' });
}
};
// Protected route
app.get('/profile', authenticateJWT, (req, res) => {
res.json({ message: 'Profile accessed', user: req.user });
});
// Role-based route
app.get('/admin', authenticateJWT, (req, res) => {
// Check if user has admin role
if (req.user.role !== 'admin') {
return res.status(403).json({ message: 'Access denied: admin role required' });
}
res.json({ message: 'Admin panel accessed' });
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
OAuth 2.0 প্রমাণীকরণ
OAuth 2.0 হল প্রমাণীকরণের জন্য একটি শিল্প-মান প্রোটোকল যা অ্যাপ্লিকেশনগুলিকে HTTP পরিষেবাগুলির মাধ্যমে ব্যবহারকারীর অ্যাকাউন্টগুলিতে সীমিত অ্যাক্সেস পেতে সক্ষম করে৷
এটি ব্যবহারকারীর অ্যাকাউন্ট ধারণ করে এমন পরিষেবাতে ব্যবহারকারীর প্রমাণীকরণ অর্পণ করে কাজ করে।
OAuth 2.0 ফ্লো ওভারভিউ
Passport.js এর সাথে বাস্তবায়ন
const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const session = require('express-session');
const app = express();
// Configure sessions for OAuth 2.0
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false,
cookie: { secure: process.env.NODE_ENV === 'production' }
}));
// Initialize Passport
app.use(passport.initialize());
app.use(passport.session());
// Configure Google OAuth 2.0 strategy
passport.use(new GoogleStrategy({
clientID: 'YOUR_GOOGLE_CLIENT_ID',
clientSecret: 'YOUR_GOOGLE_CLIENT_SECRET',
callbackURL: 'http://localhost:8080/auth/google/callback'
},
(accessToken, refreshToken, profile, done) => {
// In a real app, you'd find or create a user in your database
const user = {
id: profile.id,
displayName: profile.displayName,
email: profile.emails[0].value,
provider: 'google'
};
return done(null, user);
}
));
// Serialize user for session
passport.serializeUser((user, done) => {
done(null, user);
});
// Deserialize user from session
passport.deserializeUser((user, done) => {
done(null, user);
});
// Routes for Google OAuth
app.get('/auth/google',
passport.authenticate('google', { scope: ['profile', 'email'] })
);
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
(req, res) => {
// Successful authentication
res.redirect('/profile');
}
);
// Middleware to check authentication
const isAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
};
// Protected route
app.get('/profile', isAuthenticated, (req, res) => {
res.json({ user: req.user });
});
// Logout route
app.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
API কী প্রমাণীকরণ
API কী আপনার API-এ ক্লায়েন্টদের প্রমাণীকরণ করার একটি সহজ উপায়।
এগুলি সার্ভার-টু-সার্ভার যোগাযোগের জন্য বা যখন ব্যবহারকারীকে প্রসঙ্গ ছাড়াই কলিং প্রোগ্রাম সনাক্ত করতে হবে তখন সবচেয়ে উপযুক্ত।
API কীগুলির জন্য সর্বোত্তম অনুশীলন:
- কীগুলি নিরাপদে সংরক্ষণ করুন (পরিবেশ ভেরিয়েবল, গোপন ব্যবস্থাপনা পরিষেবা)
- নিয়মিত চাবি ঘোরান
- মূল প্রকাশ প্রতিরোধ করতে HTTPS ব্যবহার করুন
- প্রতি কী হার নিয়ন্ত্রণ সক্ষম করুন
const express = require('express');
const app = express();
// Sample API keys database
const apiKeys = [
{ key: 'api-key-1', owner: 'client1', permissions: ['read'] },
{ key: 'api-key-2', owner: 'client2', permissions: ['read', 'write'] }
];
// Middleware for API key authentication
const authenticateApiKey = (req, res, next) => {
// Get API key from header or query parameter
const apiKey = req.headers['x-api-key'] || req.query.api_key;
if (!apiKey) {
return res.status(401).json({ message: 'API key missing' });
}
// Find API key in database
const keyData = apiKeys.find(k => k.key === apiKey);
if (!keyData) {
return res.status(403).json({ message: 'Invalid API key' });
}
// Attach key data to request
req.apiKeyData = keyData;
next();
};
// Protected route with API key
app.get('/data', authenticateApiKey, (req, res) => {
res.json({
message: 'Data accessed',
client: req.apiKeyData.owner,
data: { example: 'API data' }
});
});
// Route requiring specific permission
app.post('/data', authenticateApiKey, (req, res) => {
// Check if client has write permission
if (!req.apiKeyData.permissions.includes('write')) {
return res.status(403).json({ message: 'Insufficient permissions' });
}
res.json({ message: 'Data created successfully' });
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
মৌলিক প্রমাণীকরণ
HTTP বেসিক প্রমাণীকরণ অনুমোদন হেডারে এনকোড করা শংসাপত্র ব্যবহার করে:
const express = require('express');
const app = express();
// Sample user database
const users = [
{ username: 'user1', password: 'password1' }
];
// Basic authentication middleware
const basicAuth = (req, res, next) => {
// Get Authorization header
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Basic ')) {
// If no credentials provided, request authentication
res.setHeader('WWW-Authenticate', 'Basic realm="API Authentication"');
return res.status(401).json({ message: 'Authentication required' });
}
// Extract and decode credentials
const encodedCredentials = authHeader.split(' ')[1];
const decodedCredentials = Buffer.from(encodedCredentials, 'base64').toString('utf-8');
const [username, password] = decodedCredentials.split(':');
// Validate credentials
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
res.setHeader('WWW-Authenticate', 'Basic realm="API Authentication"');
return res.status(401).json({ message: 'Invalid credentials' });
}
// Attach user to request
req.user = { username: user.username };
next();
};
// Protected route
app.get('/api/data', basicAuth, (req, res) => {
res.json({
message: 'Data accessed',
user: req.user.username,
data: { example: 'Sensitive data' }
});
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
Multi-Factor Authentication (MFA)
সময়-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড (TOTP) সহ নিরাপত্তার একটি অতিরিক্ত স্তর যোগ করা:
const express = require('express');
const bodyParser = require('body-parser');
const speakeasy = require('speakeasy');
const QRCode = require('qrcode');
const jwt = require('jsonwebtoken');
const app = express();
app.use(bodyParser.json());
// In-memory database (use a real database in production)
const users = [];
const JWT_SECRET = 'your-jwt-secret-key';
// Step 1: Register a user and set up MFA
app.post('/register', (req, res) => {
const { username, password } = req.body;
// Check if user already exists
if (users.find(u => u.username === username)) {
return res.status(400).json({ message: 'Username already exists' });
}
// Generate secret for TOTP
const secret = speakeasy.generateSecret({
name: `MyApp:${username}`
});
// Create user
const newUser = {
id: users.length + 1,
username,
password, // In production, hash passwords!
mfaSecret: secret.base32,
mfaEnabled: false
};
users.push(newUser);
// Generate QR code for TOTP setup
QRCode.toDataURL(secret.otpauth_url, (err, dataUrl) => {
if (err) {
return res.status(500).json({ message: 'Error generating QR code' });
}
res.json({
message: 'User registered. Please set up MFA.',
user: {
id: newUser.id,
username: newUser.username
},
mfaSecret: secret.base32,
qrCode: dataUrl
});
});
});
// Step 2: Verify and enable MFA
app.post('/verify-mfa', (req, res) => {
const { username, token } = req.body;
// Find user
const user = users.find(u => u.username === username);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
// Verify token against user's secret
const verified = speakeasy.totp.verify({
secret: user.mfaSecret,
encoding: 'base32',
token
});
if (!verified) {
return res.status(400).json({ message: 'Invalid MFA token' });
}
// Enable MFA for user
user.mfaEnabled = true;
res.json({ message: 'MFA enabled successfully' });
});
// Step 3: Login with MFA
app.post('/login', (req, res) => {
const { username, password } = req.body;
// Find user
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(401).json({ message: 'Invalid credentials' });
}
// Check if MFA is enabled
if (user.mfaEnabled) {
return res.json({
message: 'Password verified. MFA token required.',
requireMFA: true,
userId: user.id
});
}
// If MFA not enabled, generate token directly
const token = jwt.sign(
{ id: user.id, username: user.username },
JWT_SECRET,
{ expiresIn: '1h' }
);
res.json({ message: 'Login successful', token });
});
// Step 4: Verify MFA token and complete login
app.post('/verify-login', (req, res) => {
const { userId, mfaToken } = req.body;
// Find user
const user = users.find(u => u.id === userId);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
// Verify MFA token
const verified = speakeasy.totp.verify({
secret: user.mfaSecret,
encoding: 'base32',
token: mfaToken
});
if (!verified) {
return res.status(401).json({ message: 'Invalid MFA token' });
}
// Generate JWT token
const token = jwt.sign(
{ id: user.id, username: user.username },
JWT_SECRET,
{ expiresIn: '1h' }
);
res.json({ message: 'Login successful', token });
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
নিরাপত্তা সেরা অনুশীলন
গুরুত্বপূর্ণ:
প্রমাণীকরণ বাস্তবায়ন করার সময় নিরাপত্তা ঐচ্ছিক নয়। আপনার অ্যাপ এবং ব্যবহারকারীদের সুরক্ষিত রাখতে এই সেরা অনুশীলনগুলি অনুসরণ করুন।
পাসওয়ার্ড সুরক্ষা
- কখনোই প্লেইন টেক্সট পাসওয়ার্ড সংরক্ষণ করবেন না- সর্বদা শক্তিশালী হ্যাশিং অ্যালগরিদম যেমন bcrypt বা Argon2 ব্যবহার করুন
- শক্তিশালী পাসওয়ার্ড প্রয়োগ করুন- ন্যূনতম দৈর্ঘ্য, বিশেষ অক্ষর এবং সংখ্যা প্রয়োজন
- পাসওয়ার্ড রোটেশন সক্ষম করুন- ব্যবহারকারীদের পর্যায়ক্রমে পাসওয়ার্ড পরিবর্তন করতে বলুন
টোকেন নিরাপত্তা
- স্বল্পকালীন অ্যাক্সেস টোকেন ব্যবহার করুন- 15-60 মিনিট সাধারণ
- রিফ্রেশ টোকেন সক্ষম করুন- পুনরায় প্রমাণীকরণ ছাড়াই নতুন অ্যাক্সেস টোকেন পেতে
- নিরাপদে টোকেন সংরক্ষণ করুন- ওয়েব অ্যাপ্লিকেশনের জন্য শুধুমাত্র-এইচটিটিপি, সুরক্ষিত, একই-সাইট কুকিজ ব্যবহার করুন
জননিরাপত্তা
- সর্বদা HTTPS ব্যবহার করুন- সমস্ত ট্র্যাফিক এনক্রিপ্ট করুন
- হার নিয়ন্ত্রণ সক্ষম করুন- পাশবিক শক্তি আক্রমণ প্রতিরোধ করুন
- নিরাপত্তা শিরোনাম ব্যবহার করুন- সিএসপি, এক্স-কন্টেন্ট-টাইপ-বিকল্প, এক্স-ফ্রেম-বিকল্প ইত্যাদি
- নিবন্ধন এবং নিরীক্ষণ- স্বীকৃতি প্রচেষ্টার অডিট রেকর্ড বজায় রাখুন
OAuth 2.0 নিরাপত্তা
- PKCE ব্যবহার করুন- সাধারণ গ্রাহকদের জন্য (মোবাইল/নেটিভ অ্যাপস)
- রিডাইরেক্ট ইউআরআই চেক করুন- ওপেন লুপব্যাক দুর্বলতা প্রতিরোধ করুন
- গ্রাহকের গোপনীয়তা নিরাপদে সংরক্ষণ করুন- সংস্করণ নিয়ন্ত্রণে কখনই নয়
উদাহরণ: bcrypt দিয়ে সুরক্ষিত পাসওয়ার্ড হ্যাশিং
const bcrypt = require('bcrypt');
const saltRounds = 10;
// Hashing a password
async function hashPassword(plainPassword) {
return await bcrypt.hash(plainPassword, saltRounds);
}
// Verifying a password
async function verifyPassword(plainPassword, hashedPassword) {
return await bcrypt.compare(plainPassword, hashedPassword);
}
প্রমাণীকরণ পদ্ধতির সমন্বয়
বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলিতে, আপনাকে প্রায়শই একাধিক প্রমাণীকরণ পদ্ধতি একত্রিত করতে হবে:
// JWT authentication with API rate limiting and refresh tokens
const express = require('express');
const jwt = require('jsonwebtoken');
const rateLimit = require('express-rate-limit');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
// Configure rate limiting
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 5, // 5 attempts per window
message: 'Too many login attempts, please try again later'
});
// JWT configuration
const JWT_SECRET = 'your-jwt-secret-key';
const JWT_REFRESH_SECRET = 'your-refresh-token-secret';
// Token storage (use a database in production)
const tokenBlacklist = new Set();
const refreshTokens = new Set();
// Login route with rate limiting
app.post('/login', loginLimiter, (req, res) => {
const { username, password } = req.body;
// Authentication logic (simplified)
if (username !== 'user1' || password !== 'password1') {
return res.status(401).json({ message: 'Invalid credentials' });
}
// Generate tokens
const accessToken = jwt.sign(
{ id: 1, username },
JWT_SECRET,
{ expiresIn: '15m' } // Short-lived access token
);
const refreshToken = jwt.sign(
{ id: 1, username },
JWT_REFRESH_SECRET,
{ expiresIn: '7d' } // Longer-lived refresh token
);
// Store refresh token
refreshTokens.add(refreshToken);
res.json({
message: 'Login successful',
accessToken,
refreshToken
});
});
// Refresh token route
app.post('/refresh-token', (req, res) => {
const { refreshToken } = req.body;
if (!refreshToken) {
return res.status(401).json({ message: 'Refresh token required' });
}
// Check if token exists and is not blacklisted
if (!refreshTokens.has(refreshToken)) {
return res.status(403).json({ message: 'Invalid refresh token' });
}
try {
// Verify refresh token
const decoded = jwt.verify(refreshToken, JWT_REFRESH_SECRET);
// Generate new access token
const accessToken = jwt.sign(
{ id: decoded.id, username: decoded.username },
JWT_SECRET,
{ expiresIn: '15m' }
);
res.json({
message: 'Token refreshed',
accessToken
});
} catch (error) {
// Remove invalid refresh token
refreshTokens.delete(refreshToken);
return res.status(403).json({ message: 'Invalid or expired refresh token' });
}
});
// JWT verification middleware
const authenticateJWT = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ message: 'Authorization header required' });
}
const token = authHeader.split(' ')[1];
// Check if token is blacklisted
if (tokenBlacklist.has(token)) {
return res.status(403).json({ message: 'Token revoked' });
}
try {
// Verify token
const decoded = jwt.verify(token, JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(403).json({ message: 'Invalid or expired token' });
}
};
// Logout route
app.post('/logout', authenticateJWT, (req, res) => {
const authHeader = req.headers.authorization;
const token = authHeader.split(' ')[1];
const { refreshToken } = req.body;
// Blacklist the current access token
tokenBlacklist.add(token);
// Remove refresh token if provided
if (refreshToken) {
refreshTokens.delete(refreshToken);
}
res.json({ message: 'Logout successful' });
});
// Protected route
app.get('/protected', authenticateJWT, (req, res) => {
res.json({
message: 'Protected resource accessed',
user: req.user
});
});
// Start server
app.listen(8080, () => {
console.log('Server running on port 8080');
});
প্রমাণীকরণের জন্য HTTP শিরোনাম
API প্রমাণীকরণ বাস্তবায়ন করার সময়, ব্যবহৃত HTTP শিরোনামগুলি গুরুত্বপূর্ণ:
- অনুমোদনের শিরোনাম:এটি একটি প্রমিত HTTP হেডার যা JWT, OAuth এবং বেসিক প্রমাণ সহ বেশিরভাগ API প্রমাণীকরণ কৌশলগুলিতে প্রমাণীকরণ টোকেন পাঠাতে ব্যবহৃত হয়।
- সাধারণ বিন্যাস:অনুমোদন: JWT এবং OAuth 2.0 এর জন্য Bearer <token>
- মৌলিক প্রমাণীকরণের বিন্যাস: Authorization: Basic <base64-encoded-credentials>
বিভিন্ন API প্রকারের জন্য প্রমাণীকরণ কৌশল
| API প্রকার | প্রস্তাবিত স্বীকৃতি | বিবেচনা করার বিষয় |
|---|---|---|
| পাবলিক API | API কী | প্রয়োগ করা সহজ, ট্র্যাকিং ব্যবহারের জন্য দুর্দান্ত |
| সার্ভিস-টু-সার্ভিস API | JWT (অস্থির) বা পারস্পরিক TLS | ন্যূনতম ওভারহেড, উচ্চ নিরাপত্তা |
| মোবাইল/ওয়েব অ্যাপ্লিকেশন API | OAuth 2.0 + JWT | ভাল ব্যবহারকারীর অভিজ্ঞতা, তৃতীয় পক্ষের প্রমাণীকরণ পরিচালনা করা |
| একক-পৃষ্ঠা অ্যাপ্লিকেশন API | রিফ্রেশ টোকেন সহ JWT | ফ্রন্ট-এন্ড কনফিগারেশনের সাথে ভাল কাজ করে |
| IoT ডিভাইস API | ক্লায়েন্ট সার্টিফিকেট বা API কী | সীমিত ডিভাইস ক্ষমতা পরিচালনা করে |
উপসংহার
আপনি এখন Node.js API-এর জন্য প্রয়োজনীয় প্রমাণীকরণ পদ্ধতিগুলি অন্বেষণ করেছেন৷ এখানে আমরা যা কভার করেছি তার একটি দ্রুত সংক্ষিপ্ত বিবরণ:
প্রমাণীকরণ পদ্ধতি
- Session-based- সার্ভার-সাইড সেশন ব্যবহার করে ঐতিহ্যগত পদ্ধতি
- JWT Tokens- বিতরণ করা সিস্টেমের জন্য উদ্বায়ী টোকেন
- OAuth 2.0- তৃতীয় পক্ষের প্রমাণীকরণের জন্য শিল্পের মান
- API Keys- সার্ভার থেকে সার্ভার যোগাযোগের জন্য সহজ প্রমাণীকরণ
নিরাপত্তা অপরিহার্য
- সর্বদা HTTPS ব্যবহার করুন
- bcrypt/Argon2 সহ পাসওয়ার্ড হ্যাশ করুন
- স্বল্পস্থায়ী টোকেন ব্যবহার করুন
- হার নিয়ন্ত্রণ সক্ষম করুন
অনুশীলন করুন
সঠিক HTTP হেডার নামটি টেনে আনুন এবং ফেলে দিন।
সাধারণত প্রমাণীকরণ টোকেন পাঠাতে______শিরোনাম ব্যবহার করা হয়।