সেশন টাইমআউটের পরে SAML 2.0 একক লগ আউট বোঝা
যেহেতু SAML 2.0 একক সাইন-অন (SSO) সিস্টেম ব্যবহারকারীদের শংসাপত্রের একক সেট ব্যবহার করে বিভিন্ন অ্যাপ্লিকেশনে সাইন ইন করার অনুমতি দেয়, তাদের ব্যবহারকারীর প্রমাণীকরণ যথেষ্ট সরলীকৃত হয়েছে। কিন্তু সিঙ্গেল লগ আউট (SLO) ধারণার সাথেও উল্লেখযোগ্য সমস্যা রয়েছে, বিশেষ করে কোন ব্যবহারকারীর সেশনের মেয়াদ শেষ হয়ে গেলে পরিষেবা প্রদানকারী (SP)-তে লগ ইন না করার কারণে কী ঘটে। এই ক্ষেত্রে, পরিচয় প্রদানকারীর উচিত (আইডিপি) সেশনও শেষ?
SAML 2.0 এর প্রেক্ষাপটে নিরাপদ এবং দক্ষ অ্যাক্সেস নিশ্চিত করার জন্য SP এবং IDP-এর মধ্যে সেশন ম্যানেজমেন্ট অপরিহার্য। ব্যবহারকারীকে এখনও IDP-এর সাথে সংযুক্ত থাকতে হবে কিনা যখন একটি SP অধিবেশন শেষ হয় তখন এটি সর্বদা সুস্পষ্ট নয়, যা একই IDP-এর সাথে লিঙ্ক করা অন্যান্য অ্যাপগুলিতে প্রভাব ফেলতে পারে। এটি ব্যবহারযোগ্যতার পাশাপাশি নিরাপত্তা নিয়ে প্রশ্ন তোলে।
এই সেশন টাইমআউটগুলি পরিচালনা করার জন্য একটি স্পষ্ট সর্বোত্তম অনুশীলন অনেক ব্যবসার দ্বারা প্রতিষ্ঠিত করা প্রয়োজন, বিশেষ করে যারা মাইক্রোসফ্ট এন্টার মত ইন্টারফেস ব্যবহার করে। একটি এসপির সেশনের জন্য কি কেবল এসপি স্তরে থামানো ভাল, নাকি এর ফলে একটি এসএলও হওয়া উচিত যা ব্যবহারকারীকে তাদের IDP অ্যাকাউন্ট থেকে লগ আউট করে?
সেশন টাইমআউট পরিচালনার জন্য সবচেয়ে দক্ষ কৌশলগুলিকে চিত্রিত করার জন্য বাস্তব-বিশ্বের উদাহরণ ব্যবহার করে এবং নিরাপত্তা এবং ব্যবহারযোগ্যতা উভয়েরই গ্যারান্টি দেয়, এই কাগজটি এই ধরনের পরিস্থিতিতে SAML 2.0 SLO ইভেন্টগুলি পরিচালনা করার জন্য আদর্শ অনুশীলন এবং মান পরীক্ষা করে।
আদেশ | ব্যবহারের উদাহরণ |
---|---|
session() | ব্যবহারকারীর সেশন নিয়ন্ত্রণ করতে এক্সপ্রেস অ্যাপ্লিকেশনে ব্যবহার করা হয়েছে। উদাহরণে, এটি ব্যবহারকারীর কার্যকলাপ এবং সেশনের সময়সীমা নিরীক্ষণে সহায়তা করে যাতে প্রয়োজনে লগআউট লজিক ট্রিগার করা যায়। |
maxAge | সময় ফ্রেম নির্দিষ্ট করে যে সেশন কুকি বৈধ। এই উদাহরণে, টাইমারটি 600000 মিলিসেকেন্ড বা 10 মিনিটের পরে মেয়াদ শেষ হতে সেট করা হয়েছে এবং একটি লগআউট ইভেন্ট শুরু করবে। |
create_logout_request_url() | যখন পরিষেবা প্রদানকারীর অধিবেশন সমাপ্ত হয়, তখন এই SAML2 লাইব্রেরি পদ্ধতি দ্বারা তৈরি একক লগ আউট (SLO) অনুরোধের URL আইডেন্টিটি প্রোভাইডার (IDP)-এর কাছে ফরোয়ার্ড করা হয়৷ |
readFileSync() | মূল ফাইল এবং শংসাপত্রগুলি সিঙ্ক্রোনাসভাবে পড়ে, যা SAML2 পরিষেবা প্রদানকারী সেট আপ করার জন্য প্রয়োজনীয়৷ পরিষেবা প্রদানকারী এবং পরিচয় প্রদানকারীর নিরাপদে যোগাযোগ করার জন্য, এই সার্টিফিকেশনগুলি প্রয়োজনীয়৷ |
assert_endpoint | ইউআরএলটি নির্দেশ করে যে, সফল প্রমাণীকরণের পরে, পরিচয় প্রদানকারী SAML দাবি প্রেরণ করতে ব্যবহার করবে। এটি করার মাধ্যমে, ব্যবহারকারীর প্রমাণীকরণের পরিষেবা প্রদানকারী স্তর নিশ্চিত করা হয়। |
window.onload | এই ইভেন্টটি ফ্রন্টএন্ডে সেশন নিষ্ক্রিয়তা টাইমার রিসেট করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারী যখন প্রথমবারের জন্য প্রোগ্রামটি লোড করে, টাইমারটি আবার শুরু হয়। |
onmousemove | সেশন টাইমার রিসেট করতে, এই ইভেন্ট শ্রোতা কোনো মাউস নড়াচড়া সনাক্ত করে। ব্যবহারকারীর আচরণের উপর নজর রাখা এবং দুর্ঘটনাজনিত সেশনের সময়সীমা এড়ানোর জন্য এটি অপরিহার্য। |
fetch() | সেশন টাইমআউটের পরে, সার্ভারে অ্যাসিঙ্ক্রোনাসভাবে একটি SLO অনুরোধ পাঠাতে ব্যবহৃত হয়। আইডেন্টিটি প্রোভাইডারের সাথে সংযোগ করতে এবং ব্যবহারকারীকে IDP থেকে লগ আউট করার জন্য, এটি ব্যাকএন্ড লজিক বন্ধ করে দেয়। |
setTimeout() | ফ্রন্টএন্ড কোডের এই ফাংশনটি পূর্বনির্ধারিত পরিমাণ নিষ্ক্রিয়তার পরে সেশনের সময় শেষ হওয়ার ঘটনা ঘটায়। ব্যবহারকারীর আচরণের উপর নজর রাখা এবং নিরাপত্তা প্রবিধান বাস্তবায়নের জন্য এটি অপরিহার্য। |
SAML 2.0 সেশন টাইমআউট হ্যান্ডলিং সহ একক লগ আউট অপ্টিমাইজ করা৷
ব্যবহার করে Node.js এবং এক্সপ্রেস, একক লগ আউট (SLO) পরিচালনার জন্য ব্যাকএন্ড স্ক্রিপ্ট ব্যবহারকারীর সেশনের মেয়াদ ট্র্যাক করার ক্ষমতার উপর ফোকাস করে এবং পরিষেবা প্রদানকারী (SP) এবং আইডেন্টিটি প্রোভাইডার (IDP) স্তরে একটি লগআউট ক্রম শুরু করে। এক্সপ্রেস সেশনের ব্যবস্থাপনা এই যুক্তির কেন্দ্রবিন্দুতে রয়েছে। আমাদের উদাহরণে, পূর্বনির্ধারিত পরিমাণ নিষ্ক্রিয়তা-দশ মিনিটের পরে সমাপ্ত হওয়ার জন্য সেশন সেট করে আমরা একটি ট্রিগার পয়েন্ট স্থাপন করি। যখন সেশন শেষ হয়, স্ক্রিপ্টটি একটি SAML 2.0 লগআউট অনুরোধ শুরু করতে `create_logout_request_url()} পদ্ধতি ব্যবহার করে, যা পরে IDP-এর সাথে সংযোগ করে (এই ক্ষেত্রে, মাইক্রোসফট এন্ট্রা) ব্যবহারকারীর সেশন সম্পূর্ণভাবে শেষ করতে। এটি নিশ্চিত করে যে ব্যবহারকারী সম্পূর্ণরূপে সিস্টেম থেকে লগ আউট করেছেন তার দ্বারা নিরাপত্তা বৃদ্ধি করে৷
আমরা লোড SAML শংসাপত্র এবং SP (MyApp) এবং IDP (Microsoft Entra) এর মধ্যে সুরক্ষিত যোগাযোগ সক্ষম করতে `readFileSync()} কমান্ড ব্যবহার করে অ্যাপ্লিকেশনের কীগুলি। লগআউট অনুরোধটি প্রমাণীকরণ করে, এই শংসাপত্রগুলি অবৈধ লগআউটগুলি থেকে রক্ষা করে এবং গ্যারান্টি দেয় যে যোগাযোগটি এনক্রিপ্ট করা এবং নিশ্চিত করা থাকবে৷ ব্যবহারকারীকে লগআউট অনুরোধ URL তৈরি করার পরে পাঠানো হয়, যেখানে IDP লগআউট পরিচালনা করে এবং প্রয়োজন হলে, ব্যবহারকারীর সেশন যেকোন সংশ্লিষ্ট অ্যাপ্লিকেশন জুড়ে শেষ করে। মাল্টি-অ্যাপ্লিকেশন সিঙ্গেল সাইন-অন (SSO) ইনস্টলেশনের নিরাপত্তা এবং অখণ্ডতা বজায় রাখার জন্য এই দ্বিমুখী যোগাযোগের প্রয়োজন।
সামনের প্রান্তে রিয়েল টাইমে ব্যবহারকারীর কার্যকলাপ ট্র্যাক করার জন্য JavaScript স্ক্রিপ্ট অপরিহার্য। প্রতিবার ব্যবহারকারী প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট করে, আমরা ইভেন্ট লিসেনার যেমন `onmousemove} এবং `onkeypress` ব্যবহার করে সেশন টাইমআউট রিসেট করি। একটি টাইমার যা `setTimeout()` দিয়ে সেট করা হয়েছিল ব্যবহারকারীকে সতর্ক করে এবং ব্যবহারকারী নিষ্ক্রিয় হয়ে গেলে SP (MyApp) থেকে তাদের স্বয়ংক্রিয়ভাবে লগ আউট করে। লগআউটের পরে, SAML 2.0 লগআউট প্রক্রিয়াটি পূর্বে কভার করা হয়েছিল ফ্রন্টএন্ড স্ক্রিপ্ট দ্বারা ব্যাকএন্ডে একটি SLO অনুরোধ পাঠানোর মাধ্যমে `fetch()` ব্যবহার করে। এই কৌশলটি নিশ্চিত করে যে SP স্তরে নিষ্ক্রিয়তা অবিলম্বে, নিরাপদে এবং ব্যর্থ ছাড়াই সমাধান করা হয়েছে।
যখন SAML 2.0 ইন্টিগ্রেশন এবং সেশন ব্যবস্থাপনা একত্রিত করা হয়, ব্যবহারকারীর অভিজ্ঞতা নিরবচ্ছিন্ন এবং নিরাপত্তা মান সমুন্নত থাকে। নিষ্ক্রিয়তার সময় অনুমতির চেয়ে বেশি সময় ধরে ব্যবহারকারীকে প্রমাণীকরণ করা থেকে বিরত রাখার জন্য, সেশন টাইমআউট স্থানীয় SP লগআউট এবং IDP লগআউট উভয়ই শুরু করে। যদিও SAML 2.0-এর সেশন টাইমআউটের ক্ষেত্রে কোনো বিশেষ আচরণের প্রয়োজন হয় না, এটি সাধারণত SLO শুরু করার জন্য সেশনের মেয়াদ শেষ করার জন্য একটি সর্বোত্তম অনুশীলন হিসাবে গৃহীত হয়। নিষ্ক্রিয় সেশন শেষ করে, এটি বিভিন্ন SSO-সংযুক্ত প্ল্যাটফর্ম জুড়ে সিঙ্ক্রোনাইজড লগআউট সক্ষম করে নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতার মধ্যে ভারসাম্য রক্ষা করে।
সেশন টাইমআউট সহ SAML 2.0 একক লগ আউট পরিচালনা করতে Node.js এবং Express ব্যবহার করে
Node.js এবং Express ব্যবহার করে সার্ভিস প্রোভাইডার সেশন টাইমআউট সহ SAML 2.0 SLO পরিচালনার জন্য ব্যাকএন্ড পদ্ধতি। এই সমাধানটি সেশনের মেয়াদ শেষ হয়েছে কিনা তা পরীক্ষা করতে SAML অনুরোধগুলি ব্যবহার করে এবং পরিচয় প্রদানকারী স্তরে SLO শুরু করে৷
// Required modules for Node.js and SAML SSO
const express = require('express');
const session = require('express-session');
const saml2 = require('saml2-js');
const app = express();
// Service Provider (SP) setup
const sp = new saml2.ServiceProvider({
entity_id: "http://myapp.com/metadata.xml",
private_key: fs.readFileSync("./cert/sp-private-key.pem").toString(),
certificate: fs.readFileSync("./cert/sp-certificate.pem").toString(),
assert_endpoint: "http://myapp.com/assert"
});
// Identity Provider (IDP) setup
const idp = new saml2.IdentityProvider({
sso_login_url: "https://login.microsoftonline.com/sso",
sso_logout_url: "https://login.microsoftonline.com/logout",
certificates: fs.readFileSync("./cert/idp-certificate.pem").toString()
});
// Session management
app.use(session({
secret: 'mySecretKey',
resave: false,
saveUninitialized: true,
cookie: { maxAge: 600000 } // Set session expiration time
}));
// Middleware to handle session timeout and SLO
app.use((req, res, next) => {
if (req.session.expires && Date.now() > req.session.expires) {
sp.create_logout_request_url(idp, {}, (err, logout_url) => {
if (err) return res.status(500).send("Logout error");
return res.redirect(logout_url); // Trigger SLO
});
} else {
next(); // Continue if session is valid
}
});
app.listen(3000, () => {
console.log("Server running on port 3000");
});
SAML 2.0 SLO হ্যান্ডেল করার জন্য জাভাস্ক্রিপ্ট ফ্রন্টএন্ড এবং নিষ্ক্রিয় টাইমআউট সনাক্তকরণ ব্যবহার করা
ফ্রন্টএন্ড পদ্ধতিতে, ব্যবহারকারীর নিষ্ক্রিয়তা নিরীক্ষণ করতে এবং একক লগ আউট (এসএলও) শুরু করতে ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে একটি সেশন টাইমআউট সনাক্ত করা হয়। এটি পরিষেবা প্রদানকারীকে আইডেন্টিটি প্রোভাইডারকে একটি SLO অনুরোধ জারি করতে বলে।
// Define variables for session timeout
let timeoutDuration = 600000; // 10 minutes
let timeoutTimer;
// Reset the timer on any user interaction
function resetTimer() {
clearTimeout(timeoutTimer);
timeoutTimer = setTimeout(triggerLogout, timeoutDuration);
}
// Trigger logout function
function triggerLogout() {
alert("Session expired due to inactivity.");
window.location.href = "/logout"; // Redirect to SP logout
}
// Monitor user actions
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;
// SLO event triggered after logout
function sendSLORequest() {
fetch('/api/slo', { method: 'POST' })
.then(response => {
if (response.ok) {
console.log("SLO request sent to IDP");
}
})
.catch(err => console.error("SLO request failed", err));
}
SAML 2.0 অন্বেষণ: একক লগ আউট এবং নিষ্ক্রিয়তার সময়সীমা
কিভাবে SAML 2.0 একক লগ আউট (SLO) ঠিকানাগুলি নিষ্ক্রিয়তা পরিষেবা প্রদানকারী (SP) স্তরে পরিচালনা করার জন্য একটি গুরুত্বপূর্ণ উপাদান। যদিও এটা স্পষ্ট যে SP-তে একটি ম্যানুয়াল লগআউটের ফলে একটি আইডেন্টিটি প্রোভাইডার (IDP) লগআউটও হওয়া উচিত, নিষ্ক্রিয়তার কারণে সেশনের সময়সীমা জটিল হয়ে যায়। SAML 2.0 স্ট্যান্ডার্ড স্পষ্টভাবে উল্লেখ করে না যে সেশনের মেয়াদ শেষ হলে SLO কীভাবে পরিচালনা করা উচিত। তবে এটি সর্বোত্তম অনুশীলনগুলি গ্রহণের অনুমতি দেয় যা ব্যবহারকারীর অভিজ্ঞতা এবং নিরাপত্তা উন্নত করতে পারে।
উদাহরণস্বরূপ, নিষ্ক্রিয়তার কারণে SP থেকে বন্ধ হয়ে যাওয়ার পরেও, যে ব্যবহারকারীরা Microsoft Entra (IDP) এর মাধ্যমে MyApp-এর মতো একটি অ্যাপ্লিকেশনে লগ ইন করেন তারা প্রায়ই IDP-এ লগ ইন করেন। ব্যবহারকারী যদি বিশ্বাস করেন যে তারা সম্পূর্ণভাবে লগ আউট হয়ে গেছে যখন একই SSO ব্যবহার করে অন্য অ্যাপগুলি এখনও চলছে, তাহলে এটি বাড়তে পারে নিরাপত্তা উদ্বেগ. IDP স্তরে SP টাইমআউট ইভেন্ট অনুকরণ করতে SAML সেশন ম্যানেজমেন্ট সেট আপ করা এবং সিঙ্ক্রোনাইজড লগআউটের গ্যারান্টি এই ঝুঁকি কমানোর একটি উপায়।
নিষ্ক্রিয় সনাক্তকরণ কৌশলগুলির ফ্রন্টএন্ড কোডের বাস্তবায়ন আরেকটি কারণ। বিকাশকারীরা ব্যবহারকারীর কার্যকলাপের জন্য ইভেন্ট শ্রোতাদের ব্যবহার করে সেশনের মেয়াদ শেষ হওয়ার আগে নিষ্ক্রিয়তার সময় অনুমান করতে এবং ব্যবহারকারীদের সতর্ক করতে পারে। এটি ব্যবহার করে, ব্যবহারকারীরা তাদের সেশনের উপর নিয়ন্ত্রণ রাখতে পারে এবং নিশ্চিত করতে পারে যে তাদের SSO অধিবেশন একটানা চলে না। একটি এসএসও-সমন্বিত পরিবেশে, বিকাশকারীরা এই কারণগুলির মধ্যে ভারসাম্য বজায় রেখে সুরক্ষা এবং ব্যবহারকারীর স্বাচ্ছন্দ্য রক্ষা করতে পারে।
SAML 2.0 SLO এবং সেশন টাইমআউট সম্পর্কে সাধারণ প্রশ্ন
- সেশনের সময় শেষ হলে পরিষেবা প্রদানকারী স্তরে কী ঘটে?
- সাধারণত, SP স্তরে একটি সেশন টাইম আউট হলে ব্যবহারকারী প্রোগ্রাম থেকে লগ আউট হয়। এটি সিস্টেমটি কীভাবে সেট আপ করা হয়েছে তার উপর নির্ভর করে, যদিও, SAML 2.0 স্পেকের প্রয়োজন হয় না যে এটি IDP-এ একটি SLO সৃষ্টি করে।
- পরিচয় প্রদানকারীর একটি SLO কি একটি পরিষেবা প্রদানকারীর সেশন টাইমআউট দ্বারা ট্রিগার করা উচিত?
- সংস্থার নীতি এটি পরিচালনা করে। যদিও SAML 2.0 এটিকে বাধ্যতামূলক করে না, অনেকে নিরাপত্তার কারণে SP অধিবেশন শেষ হলে IDP-এ SLO সেট অফ করা বেছে নেয়।
- যখন একটি নিষ্ক্রিয় অধিবেশন শেষ হয়, আমি কিভাবে SLO ঘটতে পারি?
- একটি ব্যাকএন্ড মেকানিজমের মাধ্যমে সেশনের মেয়াদ নির্ণয় করা যেতে পারে, যা তারপর শুরু করে একটি create_logout_request_url() IDP-কে একটি SLO অনুরোধ করার পদ্ধতি।
- কিভাবে ফ্রন্টএন্ডে সেশন নিষ্ক্রিয়তা সনাক্ত করা হয়?
- অনুষ্ঠান শ্রোতারা পছন্দ করেন onmousemove এবং onkeypress সাধারণভাবে নিষ্ক্রিয়তা ট্র্যাক করতে ব্যবহৃত হয় কারণ প্রতিবার যখন কোনো ব্যবহারকারী অ্যাপ্লিকেশনের সাথে ইন্টারঅ্যাক্ট করে তখন তারা একটি টাইমার রিসেট করে।
- এসপি থেকে লগ আউট করার পর, আইডিপি সেশন খোলা রাখা কি নিরাপদ?
- IDP অধিবেশন খোলা রেখে একটি নিরাপত্তা ঝুঁকি দেখা দিতে পারে, বিশেষ করে যদি ব্যবহারকারী বিশ্বাস করে যে তারা পুরোপুরি চেক আউট করেছে। এসপি সেশনের মেয়াদ শেষ হওয়ার প্রতিলিপি করার জন্য SLO সেট আপ করার পরামর্শ দেওয়া হয়।
SAML 2.0 সেশন টাইমআউট ম্যানেজমেন্ট র্যাপিং আপ
একটি SSO সিস্টেমে নিরাপত্তা বজায় রাখার জন্য নিশ্চিত হওয়া প্রয়োজন যে পরিচয় প্রদানকারী এবং পরিষেবা প্রদানকারী তাদের লগআউট প্রক্রিয়াগুলিকে সিঙ্ক্রোনাইজ করে৷ যদিও SAML 2.0 সেশন টাইমআউটগুলি কীভাবে পরিচালনা করা উচিত তা নির্দেশ করে না, অনেক ব্যবসা একক লগআউটগুলিকে অভিন্ন উপায়ে পরিচালনা করে।
নিরাপত্তা উন্নত করার জন্য নিষ্ক্রিয়তার কারণে প্রতিবার পরিষেবা প্রদানকারীর অধিবেশন শেষ হলে একটি SLO অনুরোধ পাঠানোর পরামর্শ দেওয়া হয়। এটি নিশ্চিত করে যে ব্যবহারকারী অনেক প্ল্যাটফর্মে অবাঞ্ছিত অ্যাক্সেস এড়িয়ে পরিচয় প্রদানকারীর পাশাপাশি অ্যাপ্লিকেশন থেকে লগ আউট করেছেন।
SAML 2.0 সেরা অনুশীলনের জন্য তথ্যসূত্র এবং উত্স
- SAML 2.0 এবং একক লগ আউট মান এবং নির্দেশিকা সম্পর্কে বিস্তারিত ডকুমেন্টেশন অফিসিয়ালে পাওয়া যাবে OASIS SAML 2.0 কোর স্পেসিফিকেশন .
- মাইক্রোসফ্ট এন্টার অন্তর্দৃষ্টি এবং SSO এবং SLO এর সাথে এর একীকরণের জন্য, অফিসিয়াল মাইক্রোসফ্ট ডকুমেন্টেশন দেখুন Azure সক্রিয় ডিরেক্টরি এবং SAML .
- সেশন ম্যানেজমেন্ট কৌশল সহ উদাহরণগুলিতে ব্যবহৃত Node.js SAML লাইব্রেরিটি এখানে আরও অন্বেষণ করা যেতে পারে SAML2-js লাইব্রেরি ডকুমেন্টেশন .
- একক সাইন-অন এবং সেশন ম্যানেজমেন্ট কনফিগার করার সর্বোত্তম অনুশীলনগুলি বুঝতে, নিবন্ধটিতে যান৷ SSO সর্বোত্তম অনুশীলন Auth0 দ্বারা।