OAuth 2.0: একটি পরিচিতি
OAuth 2.0 হল একটি ওপেন স্ট্যান্ডার্ড প্রোটোকল যা অ্যাপ্লিকেশনগুলিকে ব্যবহারকারীদের সংবেদনশীল তথ্য অ্যাক্সেস করার অনুমতি দেয়, কিন্তু ব্যবহারকারীর পাসওয়ার্ড সরাসরি প্রদান না করেই। এটি authentication এবং authorization প্রদান করে। OAuth 2.0 প্রোটোকল সাধারণত থার্ড-পার্টি অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত হয় যাতে তারা একজন ব্যবহারকারীর পাসওয়ার্ড ছাড়া অ্যাক্সেস টোকেনের মাধ্যমে নির্দিষ্ট তথ্য পেতে পারে।
OAuth 2.0 এর প্রধান উপাদান
OAuth 2.0 এর প্রক্রিয়া বিভিন্ন উপাদানের সমন্বয়ে কাজ করে:
- Client: যে অ্যাপ্লিকেশনটি অ্যাক্সেস টোকেনের মাধ্যমে API ব্যবহার করতে চায়।
- Authorization Server: এটি ব্যবহারকারীর পরিচয় যাচাই করে এবং অ্যাক্সেস টোকেন প্রদান করে।
- Resource Server: এটি ডেটাবেস বা তথ্যের উৎস, যেখানে রিকোয়েস্ট করা ডেটা সংরক্ষিত থাকে।
- User: যিনি অ্যাপ্লিকেশনে লগ ইন করে অ্যাক্সেস টোকেনের অনুমতি দেন।
OAuth 2.0 দুটি প্রধান ভূমিকা পালন করে:
- Authentication: এটি ব্যবহারকারীর পরিচয় যাচাই করে।
- Authorization: এটি ব্যবহারকারীর অনুমতি নিয়ে রিসোর্স অ্যাক্সেস করতে দেয়।
OAuth 2.0 Flow
OAuth 2.0 সাধারণত Authorization Code Flow ব্যবহার করে যেখানে প্রথমে ব্যবহারকারী একটি অ্যাপ্লিকেশনে লগ ইন করে, তারপর একটি authorization code প্রদান করা হয়। এরপর সেই authorization code ব্যবহার করে অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন নেওয়া হয়।
OAuth 2.0 Flow:
- Authorization Request: ব্যবহারকারীকে একটি login page এ রিডিরেক্ট করা হয়।
- Authorization Grant: একবার লগ ইন করার পরে, ব্যবহারকারী অ্যাপ্লিকেশনকে অনুমতি দেয়।
- Access Token Request: authorization code দিয়ে অ্যাক্সেস টোকেন চাওয়া হয়।
- Access Token Response: অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন প্রদান করা হয়।
- API Access: অ্যাপ্লিকেশন এখন API তে অ্যাক্সেস করতে পারে।
OAuth 2.0 Authentication Implementation
OAuth 2.0 Authentication ইমপ্লিমেন্ট করার জন্য কিছু প্রয়োজনীয় পদক্ষেপ আছে যা আমরা নিচে আলোচনা করব। সাধারণত, OAuth 2.0 পদ্ধতিতে ব্যবহারকারীকে সাইন ইন করার পর অ্যাপ্লিকেশন একটি Access Token পায়, যা API কলের জন্য প্রমাণীকরণ হিসেবে ব্যবহার করা হয়।
Step 1: OAuth 2.0 Authorization Server সেটআপ
প্রথমে, একটি OAuth 2.0 সার্ভার প্রয়োজন যা ব্যবহারকারীর অনুমতি গ্রহণ করবে এবং তাদের থেকে অ্যাক্সেস টোকেন প্রদান করবে। এই সার্ভার সাধারণত একটি Authorization Server হিসেবে কাজ করবে।
OAuth 2.0 সার্ভারের জন্য আপনি কিছু কমন টুলস যেমন Auth0, Keycloak, Okta, বা নিজস্ব সার্ভার সেটআপ করতে পারেন।
Step 2: Client অ্যাপ্লিকেশন তৈরি করা
OAuth 2.0 প্রোটোকল ব্যবহার করে একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করতে হবে। এখানে একটি Node.js ক্লায়েন্ট অ্যাপ্লিকেশনের উদাহরণ দেওয়া হয়েছে যা OAuth 2.0 টোকেন রিভোক ও রিভাইজ করে।
ক্লায়েন্ট অ্যাপ্লিকেশন কোড (Node.js Example):
- প্রথমে NPM প্যাকেজ ইনস্টল করুন:
npm install express axios dotenv
- OAuth 2.0 Authorization Code Flow সেটআপ করা:
// app.js
const express = require('express');
const axios = require('axios');
const dotenv = require('dotenv');
dotenv.config();
const app = express();
// OAuth2.0 settings
const authServerUrl = "https://your-authorization-server.com";
const clientId = process.env.CLIENT_ID;
const clientSecret = process.env.CLIENT_SECRET;
const redirectUri = process.env.REDIRECT_URI;
// Step 1: Redirect to OAuth2 authorization page
app.get('/auth', (req, res) => {
const authorizationUrl = `${authServerUrl}/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirectUri}&scope=read`;
res.redirect(authorizationUrl);
});
// Step 2: Handle authorization callback and exchange code for access token
app.get('/callback', async (req, res) => {
const { code } = req.query;
try {
const response = await axios.post(`${authServerUrl}/token`, {
client_id: clientId,
client_secret: clientSecret,
code: code,
redirect_uri: redirectUri,
grant_type: 'authorization_code'
});
const { access_token, refresh_token } = response.data;
res.send(`Access Token: ${access_token}`);
} catch (error) {
res.status(500).send('Error while retrieving access token');
}
});
// Start the server
app.listen(3000, () => {
console.log('OAuth 2.0 client app running on http://localhost:3000');
});
এখানে, /auth রুটটি ব্যবহারকারীকে OAuth 2.0 সার্ভারে রিডিরেক্ট করে, এবং ব্যবহারকারী অনুমতি দিলে /callback রুটটি অ্যাক্সেস টোকেন গ্রহণ করে।
Step 3: API Access Using Access Token
একবার অ্যাক্সেস টোকেন পেলে, সেই টোকেনটি API কল করার জন্য ব্যবহার করা যাবে। সাধারণত, অ্যাক্সেস টোকেন হেডারে পাঠানো হয়।
// Step 3: Access API with the token
app.get('/profile', async (req, res) => {
const accessToken = 'YOUR_ACCESS_TOKEN'; // Get the token after authentication
try {
const response = await axios.get('https://api.example.com/profile', {
headers: {
Authorization: `Bearer ${accessToken}`
}
});
res.json(response.data);
} catch (error) {
res.status(500).send('Error accessing the API');
}
});
এখানে, Bearer token হেডারে অ্যাক্সেস টোকেন পাস করা হয়েছে, যা API অ্যাক্সেস করতে ব্যবহৃত হয়েছে।
OAuth 2.0 এর বিভিন্ন Flow
OAuth 2.0 প্রোটোকলের মধ্যে কয়েকটি ভিন্ন ধরনের Flow রয়েছে, যেমন:
- Authorization Code Flow: এটি সর্বাধিক ব্যবহৃত ফ্লো, যেখানে ব্যবহারকারী প্রথমে লগ ইন করে এবং অ্যাক্সেস কোডটি ব্যবহার করে অ্যাক্সেস টোকেন নেওয়া হয়।
- Implicit Flow: এটি ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয় (যেমন JavaScript অ্যাপ্লিকেশন)। এটি দ্রুত কিন্তু কম নিরাপদ।
- Client Credentials Flow: এটি সার্ভিস টু সার্ভিস প্রমাণীকরণের জন্য ব্যবহৃত হয়, যেখানে ব্যবহারকারী নেই, তবে অ্যাপ্লিকেশন নিজেই অ্যাক্সেস টোকেন পায়।
- Resource Owner Password Credentials Flow: এই ফ্লোতে ব্যবহারকারী সরাসরি তাদের পাসওয়ার্ড প্রদান করে অ্যাক্সেস টোকেন নেয়, তবে এটি বেশি নিরাপদ নয়।
সারাংশ
OAuth 2.0 একটি শক্তিশালী এবং নিরাপদ প্রোটোকল যা আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়, বিশেষ করে যখন আপনি থার্ড-পার্টি সিস্টেম থেকে নিরাপদে ডেটা অ্যাক্সেস করতে চান। OAuth 2.0 authentication ইমপ্লিমেন্ট করতে, প্রথমে আপনাকে একটি authorization server সেটআপ করতে হবে, তারপর ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করে ব্যবহারকারীর অনুমতি নিতে হবে এবং অ্যাক্সেস টোকেনের মাধ্যমে API অ্যাক্সেস করতে হবে। Authorization Code Flow হল সবচেয়ে নিরাপদ এবং ব্যবহৃত ফ্লো, তবে অন্য ফ্লোগুলোও নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপযুক্ত হতে পারে।
Read more