API அங்கீகாரம் என்றால் என்ன?
API அங்கீகாரம் என்பது உங்கள் Node.js APIகளை அணுகும் வாடிக்கையாளர்களின் அடையாளத்தை சரிபார்க்கும் செயல்முறையாகும்.
இந்த விரிவான வழிகாட்டி பல்வேறு அங்கீகார முறைகள், பாதுகாப்பு சிறந்த நடைமுறைகள் மற்றும் செயல்படுத்தல் வடிவங்களை உள்ளடக்கியது, இது உங்கள் Node.js பயன்பாடுகளை திறம்பட பாதுகாக்க உதவுகிறது.
API அங்கீகாரம் ஏன் முக்கியமானது
இன்றைய இணைக்கப்பட்ட உலகில், API பாதுகாப்பு விருப்பமானது அல்ல - இது ஒரு அவசியமாகும். சரியான அங்கீகாரம் உங்களுக்கு உதவுகிறது:
பாதுகாப்பு நன்மைகள்
- அணுகல் கட்டுப்பாடு: அங்கீகரிக்கப்பட்ட பயனர்களுக்கு மட்டுமே API அணுகலை கட்டுப்படுத்தவும்
- தரவு பாதுகாப்பு: அங்கீகரிக்கப்படாத அணுகலிலிருந்து உணர்திறன் தகவல்களைப் பாதுகாக்கவும்
- அடையாள சரிபார்ப்பு: பயனர்கள் யார் என்று கூறுகிறார்களோ அதை உறுதிப்படுத்தவும்
வணிக நன்மைகள்
- பயன்பாட்டு பகுப்பாய்வு: பயனர்/பயன்பாட்டின்படி API பயன்பாட்டைக் கண்காணிக்கவும்
- மொனடிசேஷன்: பயன்பாட்டை அடிப்படையாகக் கொண்ட பில்லிங் மாதிரிகளை செயல்படுத்தவும்
- இணக்க தன்மை: ஒழுங்குமுறை தேவைகளைப் பூர்த்தி செய்யவும் (GDPR, HIPAA, முதலியன)
அங்கீகார முறைகள் கண்ணோட்டம்
வெவ்வேறு அங்கீகார முறைகள் வெவ்வேறு பயன்பாட்டு வழக்குகளுக்கு சேவை செய்கின்றன. இங்கே ஒரு விரைவான ஒப்பீடு:
| முறை | சிறந்தது | சிக்கலான தன்மை | பாதுகாப்பு நிலை |
|---|---|---|---|
| Session-Based | பாரம்பரிய வலை பயன்பாடுகள் | குறைந்த | நடுத்தர |
| JWT (Token-Based) | SPAs, மொபைல் பயன்பாடுகள் | நடுத்தர | அதிக |
| API Keys | சேவையகம்-க்கு-சேவையகம் | குறைந்த | குறைந்த-நடுத்தர |
| OAuth 2.0 | மூன்றாம் தரப்பு அணுகல் | அதிக | மிக அதிக |
Session-Based அங்கீகாரம்
Session-based அங்கீகாரம் பயனர் நிலையை பராமரிக்க குக்கீகளைப் பயன்படுத்துகிறது:
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');
});
Token-Based அங்கீகாரம் (JWT)
JSON Web Tokens (JWT) ஒரு நிலையற்ற அங்கீகார பொறிமுறையை வழங்குகின்றன, இது கச்சிதமானது மற்றும் சுய-கொண்டுள்ளது.
Session-based அங்கீகாரத்தைப் போலல்லாமல், token-based அங்கீகாரம் (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 Key அங்கீகாரம்
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');
});
Basic அங்கீகாரம்
HTTP Basic அங்கீகாரம் Authorization தலைப்பில் குறியிடப்பட்ட சான்றுகளைப் பயன்படுத்துகிறது:
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 நிமிடங்கள் பொதுவானது
- ரிஃப்ரெஷ் டோக்கன்களை செயல்படுத்தவும் - மீண்டும் அங்கீகாரம் இல்லாமல் புதிய அணுகல் டோக்கன்களைப் பெறுவதற்கு
- டோக்கன்களை பாதுகாப்பாக சேமிக்கவும் - வலை பயன்பாடுகளுக்கு HTTP-மட்டும், பாதுகாப்பான, அதே-தள குக்கீகளைப் பயன்படுத்தவும்
பொது பாதுகாப்பு
- எப்போதும் HTTPS ஐப் பயன்படுத்தவும் - அனைத்து போக்குவரத்தையும் குறியாக்கம் செய்யவும்
- விகிதம் கட்டுப்பாட்டை செயல்படுத்தவும் - ப்ரூட் ஃபோர்ஸ் தாக்குதல்களைத் தடுக்கவும்
- பாதுகாப்பு தலைப்புகளைப் பயன்படுத்தவும் - CSP, X-Content-Type-Options, X-Frame-Options போன்றவை
- பதிவு செய்து கண்காணிக்கவும் - அங்கீகார முயற்சிகளின் ஆடிட் பதிவுகளை வைத்திருங்கள்
OAuth 2.0 பாதுகாப்பு
- PKCE ஐப் பயன்படுத்தவும் - பொது வாடிக்கையாளர்களுக்கு (மொபைல்/நேட்டிவ் பயன்பாடுகள்)
- திருப்பி விடும் URIகளை சரிபார்க்கவும் - திறந்த திருப்பி விடும் பாதிப்புகளைத் தடுக்கவும்
- வாடிக்கையாளர் ரகசியங்களை பாதுகாப்பாக சேமிக்கவும் - பதிப்பு கட்டுப்பாட்டில் ஒருபோதும் இல்லை
எடுத்துக்காட்டு: 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 தலைப்புகள் முக்கியமானவை:
- Authorization தலைப்பு: இது பெரும்பாலான API அங்கீகார உத்திகளில் அங்கீகார டோக்கன்களை அனுப்ப பயன்படும் நிலையான HTTP தலைப்பாகும், இதில் JWT, OAuth மற்றும் Basic Auth ஆகியவை அடங்கும்
- பொதுவான வடிவம்: JWT மற்றும் OAuth 2.0 க்கு Authorization: Bearer <token>
- Basic Auth க்கான வடிவம்: 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 தலைப்பு பெயரை இழுத்து விடவும்.
அங்கீகார டோக்கன்களை அனுப்ப பொதுவாக ______ தலைப்பு பயன்படுத்தப்படுகிறது.