MeanJS স্ট্যাক ব্যবহার করার সময়, নিরাপদ অথেনটিকেশন এবং অথোরাইজেশন ব্যবস্থা তৈরি করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার অ্যাপ্লিকেশন APIs ব্যবহার করে এবং আপনি একাধিক তৃতীয় পক্ষের অ্যাপ্লিকেশন বা ব্যবহারকারীর কাছে ডেটা এক্সপোজ করতে চান। OAuth এবং API Authentication হল আধুনিক অ্যাপ্লিকেশন সিকিউরিটির মূল অংশ, যা একাধিক ব্যবহারকারী এবং অ্যাপ্লিকেশনের জন্য অ্যাক্সেস নিয়ন্ত্রণ ও নিরাপত্তা নিশ্চিত করে।
এখানে আমরা MeanJS স্ট্যাকের মাধ্যমে OAuth এবং API Authentication ব্যবস্থার বাস্তবায়ন নিয়ে আলোচনা করব।
OAuth (Open Authorization)
OAuth একটি ওপেন স্ট্যান্ডার্ড যা ওয়েব সার্ভিসেস এবং APIs এর মধ্যে সুরক্ষিত অথেনটিকেশন ও অথোরাইজেশন প্রদান করে। এটি ব্যবহারকারীদের তাদের একাউন্টে লগইন করার অনুমতি দেয়, অথচ তাদের পাসওয়ার্ড প্রকাশ না করে।
OAuth 2.0 ফ্লো
OAuth 2.0 হল সবচেয়ে জনপ্রিয় অথেনটিকেশন ফ্রেমওয়ার্ক যা API-এর নিরাপত্তা নিশ্চিত করে। এর মাধ্যমে, একটি অ্যাপ্লিকেশন অন্য একটি অ্যাপ্লিকেশনের resource server (যেমন Google, Facebook) থেকে রিসোর্স অ্যাক্সেস করতে পারে, অথচ ব্যবহারকারীর পাসওয়ার্ড প্রকাশ না করে।
OAuth 2.0 এর ফ্লো হলো:
- Authorization Request: ব্যবহারকারী অ্যাপ্লিকেশন থেকে অ্যাক্সেস অনুমতি চায়।
- Authorization Grant: ব্যবহারকারী অনুমতি দিলে, অ্যাপ্লিকেশন authorization code পায়।
- Access Token: অ্যাপ্লিকেশন এই কোড ব্যবহার করে access token পায়, যা API থেকে ডেটা আনার জন্য ব্যবহৃত হয়।
MeanJS এ OAuth ইন্টিগ্রেশন
OAuth2.0 ব্যবহার করে API Authentication
OAuth2.0 এর জন্য Passport.js সেটআপ: Passport.js একটি ওপেন সোর্স অথেনটিকেশন মডিউল যা Node.js এ OAuth এর মাধ্যমে অথেনটিকেশন পরিচালনা করতে ব্যবহৃত হয়। Passport-OAuth2 এর মাধ্যমে OAuth 2.0 সাপোর্ট করা যায়।
Passport.js এবং OAuth2 এর জন্য প্রথমে এটি ইনস্টল করতে হবে:
npm install passport passport-oauth2 --savePassport.js কনফিগারেশন: এরপর, passport এবং passport-oauth2 ব্যবহার করে OAuth2 সাপোর্ট কনফিগার করা হবে।
// server/config/passport.js const passport = require('passport'); const OAuth2Strategy = require('passport-oauth2').Strategy; passport.use('provider', new OAuth2Strategy({ authorizationURL: 'https://provider.com/oauth2/authorize', tokenURL: 'https://provider.com/oauth2/token', clientID: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', callbackURL: 'http://localhost:3000/auth/provider/callback' }, function(accessToken, refreshToken, profile, done) { // অ্যাক্সেস টোকেন গ্রহণ করা এবং ব্যবহারকারীর তথ্য রিটার্ন করা return done(null, profile); }));OAuth2 রাউটিং: অ্যাপ্লিকেশন থেকে OAuth এর মাধ্যমে অথেনটিকেশন করতে এই রাউটটি সেটআপ করা হয়।
// server/routes/auth.routes.js const passport = require('passport'); const express = require('express'); const router = express.Router(); // OAuth রিডাইরেকশন রাউট router.get('/auth/provider', passport.authenticate('provider', { scope: 'profile' }) ); // OAuth কলব্যাক রাউট router.get('/auth/provider/callback', passport.authenticate('provider', { failureRedirect: '/' }), function(req, res) { // সাফল্য হলে ব্যবহারকারীকে হোম পেজে রিডাইরেক্ট করা res.redirect('/'); } ); module.exports = router;Access Token এবং API Request: একবার ব্যবহারকারী সফলভাবে লগইন করলে, অ্যাপ্লিকেশনটি access token ব্যবহার করে API রিকুয়েস্ট করতে পারে।
// ব্যবহারকারীর অ্যাক্সেস টোকেন ব্যবহার করে API রিকোয়েস্ট const axios = require('axios'); axios.get('https://provider.com/api/user', { headers: { 'Authorization': 'Bearer ' + req.user.accessToken } }) .then(response => { res.json(response.data); }) .catch(error => { res.status(500).send('API Request failed'); });
এখানে, passport এবং OAuth2Strategy ব্যবহার করে OAuth2.0 এর মাধ্যমে ব্যবহারকারীকে অথেনটিকেট করা হয়েছে এবং একটি access token অর্জন করা হয়েছে, যা পরবর্তীতে API রিকুয়েস্টের জন্য ব্যবহৃত হবে।
API Authentication ব্যবস্থা
API Authentication ব্যবস্থার মাধ্যমে, অ্যাপ্লিকেশনগুলো ব্যবহারকারীর পরিচয় যাচাই করতে পারে এবং তাদের সঠিক ডেটাতে অ্যাক্সেস দিতে পারে। API Authentication এর জন্য JWT (JSON Web Token) বা OAuth সাধারণত ব্যবহৃত হয়।
JWT (JSON Web Token) ব্যবহারের মাধ্যমে API Authentication
JWT একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদ ডেটা ট্রান্সফার করতে ব্যবহৃত হয়। এটি একটি টোকেন-ভিত্তিক অথেনটিকেশন মেকানিজম যা ক্লায়েন্ট এবং সার্ভারের মধ্যে অথেনটিকেশন নিশ্চিত করতে সাহায্য করে।
- JWT টোকেন জেনারেশন
npm install jsonwebtoken --save
এবার, jsonwebtoken লাইব্রেরি ব্যবহার করে JWT টোকেন তৈরি করা যেতে পারে:
// server/routes/auth.routes.js
const jwt = require('jsonwebtoken');
const express = require('express');
const router = express.Router();
// JWT টোকেন জেনারেট করা
router.post('/login', (req, res) => {
const user = { id: 1, username: req.body.username }; // উদাহরণ ইউজার
const token = jwt.sign(user, 'your_secret_key', { expiresIn: '1h' });
res.json({ token });
});
module.exports = router;
এখানে, JWT ব্যবহার করে একটি টোকেন তৈরি করা হয়েছে এবং ব্যবহারকারীকে পাঠানো হয়েছে। এই টোকেনটি ক্লায়েন্টে সেভ করা হবে এবং পরবর্তীতে API রিকুয়েস্টে ব্যবহৃত হবে।
- JWT Authentication Middleware
JWT টোকেনের সাহায্যে API রিকুয়েস্ট অথেনটিকেট করতে একটি middleware ব্যবহার করা হয়:
// server/middleware/jwt.middleware.js
const jwt = require('jsonwebtoken');
// JWT অথেনটিকেশন middleware
function verifyToken(req, res, next) {
const token = req.header('x-auth-token');
if (!token) return res.status(401).send('Access Denied');
jwt.verify(token, 'your_secret_key', (err, decoded) => {
if (err) return res.status(400).send('Invalid token');
req.user = decoded;
next();
});
}
module.exports = verifyToken;
- API রিকুয়েস্টে JWT ব্যবহার
// server/routes/protected.routes.js
const express = require('express');
const verifyToken = require('../middleware/jwt.middleware');
const router = express.Router();
// Protected route with JWT verification
router.get('/protected', verifyToken, (req, res) => {
res.send('Protected content accessible by authenticated users');
});
module.exports = router;
এখানে, verifyToken middleware ব্যবহার করে JWT টোকেন যাচাই করা হচ্ছে এবং যদি টোকেন বৈধ হয়, তবে ব্যবহারকারীকে প্রটেক্টেড রিসোর্সে অ্যাক্সেস দেয়া হচ্ছে।
সারাংশ
MeanJS অ্যাপ্লিকেশনে OAuth এবং API Authentication ব্যবস্থাপনা গুরুত্বপূর্ণ ভূমিকা পালন করে। OAuth তৃতীয় পক্ষের অ্যাপ্লিকেশনের মাধ্যমে নিরাপদ অথেনটিকেশন প্রদান করে, যেখানে ব্যবহারকারীর পাসওয়ার্ড প্রকাশ করা হয় না, এবং JWT (JSON Web Token) ব্যবহার করে API অথেনটিকেশন ব্যবস্থাপনাটি সহজ এবং কার্যকরী হয়। Passport.js এবং JWT এর মাধ্যমে MeanJS অ্যাপ্লিকেশন নিরাপদ অথেনটিকেশন ব্যবস্থা গঠন করা সম্ভব।
Read more