فهم تسجيل الخروج الفردي لـ SAML 2.0 بعد انتهاء مهلة الجلسة
نظرًا لأن أنظمة الدخول الموحد (SSO) SAML 2.0 تسمح للمستخدمين بتسجيل الدخول إلى تطبيقات مختلفة باستخدام مجموعة واحدة من بيانات الاعتماد، فقد قامت بتبسيط مصادقة المستخدم إلى حد كبير. ولكن هناك أيضًا مشكلات مهمة تتعلق بفكرة تسجيل الخروج الفردي (SLO)، خاصة فيما يتعلق بما يحدث عندما تنتهي جلسة المستخدم لدى مزود الخدمة (SP) لأنه لم يسجل الدخول. في هذه الحالة، يجب على موفر الهوية (IDP) نهاية الجلسة كذلك؟
تعد إدارة الجلسة بين مقدم الخدمة وIDP أمرًا ضروريًا لضمان الوصول الآمن والفعال في سياق SAML 2.0. ليس من الواضح دائمًا متى تنتهي جلسة SP إذا كان المستخدم لا يزال متصلاً بموفر الهوية (IDP)، الأمر الذي قد يكون له تأثير على التطبيقات الأخرى المرتبطة بنفس موفر الهوية (IDP). وهذا يثير تساؤلات حول سهولة الاستخدام وكذلك الأمان.
يجب وضع أفضل الممارسات الواضحة للتعامل مع مهلات الجلسة هذه من قبل العديد من الشركات، خاصة تلك التي تستخدم واجهات مثل Microsoft Entra. هل من الأفضل أن تتوقف جلسة مقدم الخدمة ببساطة عند مستوى مقدم الخدمة، أم يجب أن يؤدي ذلك أيضًا إلى SLO يقوم بتسجيل خروج المستخدم من حساب IDP الخاص به؟
باستخدام أمثلة من العالم الحقيقي لتوضيح التقنيات الأكثر كفاءة للتعامل مع مهلات الجلسة وضمان الأمان وسهولة الاستخدام، تتناول هذه الورقة الممارسات والمعايير القياسية للتعامل مع أحداث SAML 2.0 SLO في مثل هذه المواقف.
يأمر | مثال للاستخدام |
---|---|
session() | يستخدم في تطبيق Express للتحكم في جلسات المستخدم. في المثال، يساعد في مراقبة نشاط المستخدم ومهلة الجلسة بحيث يمكن تشغيل منطق تسجيل الخروج عند الحاجة. |
maxAge | يحدد الإطار الزمني الذي يكون فيه ملف تعريف ارتباط الجلسة صالحًا. في هذه الحالة، يتم ضبط المؤقت على انتهاء صلاحيته بعد 600000 مللي ثانية، أو 10 دقائق، وبدء حدث تسجيل الخروج. |
create_logout_request_url() | عند انتهاء جلسة موفر الخدمة، تتم إعادة توجيه عنوان URL لطلب تسجيل الخروج الفردي (SLO) الذي تم إنشاؤه بواسطة طريقة مكتبة SAML2 هذه إلى موفر الهوية (IDP). |
readFileSync() | يقرأ الملفات الرئيسية والشهادات بشكل متزامن، وهو أمر ضروري لإعداد موفر خدمة SAML2. لكي يتمكن مقدم الخدمة وموفر الهوية من التواصل بشكل آمن، تعد هذه الشهادات ضرورية. |
assert_endpoint | يشير إلى عنوان URL الذي سيستخدمه موفر الهوية لإرسال تأكيد SAML بعد المصادقة الناجحة. ومن خلال القيام بذلك، يتم ضمان مستوى مصادقة المستخدم لمزود الخدمة. |
window.onload | يُستخدم هذا الحدث لإعادة ضبط مؤقت عدم نشاط الجلسة في الواجهة الأمامية. فهو يتأكد من أنه عندما يقوم المستخدم بتحميل البرنامج لأول مرة، يبدأ المؤقت من جديد. |
onmousemove | لإعادة ضبط مؤقت الجلسة، يكتشف مستمع الحدث هذا أي حركة للماوس. يعد ذلك ضروريًا لمراقبة سلوك المستخدم وتجنب انتهاء مهلات الجلسة غير المقصودة. |
fetch() | يُستخدم لإرسال طلب SLO بشكل غير متزامن، بعد انتهاء مهلة الجلسة، إلى الخادم. من أجل الاتصال بموفر الهوية وتسجيل خروج المستخدم من IDP، فإنه يقوم بتشغيل منطق الواجهة الخلفية. |
setTimeout() | تتسبب هذه الوظيفة في كود الواجهة الأمامية في حدوث حدث مهلة الجلسة بعد مقدار عدم النشاط المحدد مسبقًا. من الضروري مراقبة سلوك المستخدم وتنفيذ اللوائح الأمنية. |
تحسين تسجيل الخروج الفردي باستخدام معالجة مهلة جلسة SAML 2.0
استخدام Node.js و Express، يركز البرنامج النصي للواجهة الخلفية للتعامل مع تسجيل الخروج الفردي (SLO) على القدرة على تتبع انتهاء صلاحية جلسة المستخدم وبدء تسلسل تسجيل الخروج على مستويات موفر الخدمة (SP) وموفر الهوية (IDP). تكمن إدارة الجلسات السريعة في قلب هذا المنطق. نقوم بإنشاء نقطة انطلاق عن طريق ضبط الجلسة على الانتهاء بعد فترة محددة مسبقًا من عدم النشاط - عشر دقائق، في مثالنا. عند انتهاء الجلسة، يستخدم البرنامج النصي طريقة `create_logout_request_url()} لبدء طلب تسجيل خروج SAML 2.0، والذي يتصل بعد ذلك بموفر الهوية (في هذه الحالة، مايكروسوفت انترا) لإنهاء جلسة المستخدم بالكامل. يؤدي ذلك إلى تعزيز الأمان من خلال ضمان تسجيل خروج المستخدم بالكامل من النظام.
نحن تحميل شهادات SAML والمفاتيح في التطبيق باستخدام الأمر `readFileSync()} لتمكين الاتصال الآمن بين SP (MyApp) وIDP (Microsoft Entra). من خلال مصادقة طلب تسجيل الخروج، تحمي هذه الشهادات من عمليات تسجيل الخروج غير القانونية وتضمن بقاء الاتصال مشفرًا ومؤكدًا. يتم إرسال المستخدم إلى عنوان URL لطلب تسجيل الخروج بعد إنشائه، حيث يقوم IDP بمعالجة تسجيل الخروج، وإذا لزم الأمر، ينهي جلسة المستخدم عبر أي تطبيقات مرتبطة. يتطلب الحفاظ على أمان وسلامة عمليات تثبيت الدخول الموحد (SSO) متعددة التطبيقات هذا الاتصال ثنائي الاتجاه.
يعد برنامج JavaScript النصي ضروريًا لتتبع أنشطة المستخدم في الوقت الفعلي على الواجهة الأمامية. في كل مرة يتفاعل فيها المستخدم مع البرنامج، نقوم بإعادة تعيين مهلة الجلسة باستخدام مستمعي الأحداث مثل "onmousemove" و"onkeypress". يقوم المؤقت الذي تم ضبطه باستخدام `setTimeout()` بتنبيه المستخدم وتسجيل خروجه تلقائيًا من SP (MyApp) عندما يصبح المستخدم خاملاً. بعد تسجيل الخروج، تبدأ عملية تسجيل الخروج SAML 2.0 التي تمت تغطيتها مسبقًا من خلال البرنامج النصي للواجهة الأمامية الذي يرسل طلب SLO إلى الواجهة الخلفية باستخدام `fetch()`. تتأكد هذه التقنية من معالجة عدم النشاط على مستوى مقدم الخدمة بشكل سريع وآمن ودون فشل.
عندما يتم تكامل SAML 2.0 و إدارة الجلسة يتم دمجها، مما يجعل تجربة المستخدم سلسة ويتم الحفاظ على معايير الأمان. من أجل منع المستخدم من البقاء مصادقًا لفترة أطول مما هو مسموح به أثناء عدم النشاط، تبدأ مهلة الجلسة تسجيل خروج SP المحلي وتسجيل خروج IDP. على الرغم من أن SAML 2.0 لا يتطلب أي سلوك معين فيما يتعلق بمهلة الجلسة، إلا أنه من المقبول عمومًا كأفضل ممارسة استخدام انتهاء صلاحية الجلسة لبدء SLO. من خلال إنهاء الجلسات الخاملة، فإنه يحقق التوازن بين الأمان وتجربة المستخدم من خلال تمكين عمليات تسجيل الخروج المتزامنة عبر مختلف الأنظمة الأساسية المتصلة بـ SSO.
استخدام Node.js وExpress للتعامل مع تسجيل الخروج الفردي لـ SAML 2.0 مع انتهاء مهلة الجلسة
طريقة الواجهة الخلفية لإدارة SAML 2.0 SLO مع انتهاء مهلة جلسة موفر الخدمة باستخدام Node.js وExpress. يستخدم هذا الحل طلبات 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");
});
استخدام JavaScript Frontend واكتشاف مهلة الخمول للتعامل مع SAML 2.0 SLO
في إحدى طرق الواجهة الأمامية، يتم اكتشاف مهلة الجلسة باستخدام JavaScript الفانيليا لمراقبة عدم نشاط المستخدم وبدء تسجيل الخروج الفردي (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 عند انتهاء صلاحية الجلسة. ومع ذلك، يسمح هذا باعتماد أفضل الممارسات التي يمكنها تحسين تجربة المستخدم وأمانه.
على سبيل المثال، حتى بعد إغلاق مزود الخدمة بسبب عدم النشاط، فإن المستخدمين الذين يقومون بتسجيل الدخول إلى تطبيق مثل MyApp من خلال Microsoft Entra (IDP) يظلون مسجلين دخولهم بشكل متكرر إلى IDP. إذا اعتقد المستخدم أنه تم تسجيل خروجه بالكامل بينما لا تزال التطبيقات الأخرى التي تستخدم نفس تسجيل الدخول الموحّد (SSO) قيد التشغيل، فقد يؤدي ذلك إلى حدوث ذلك المخاوف الأمنية. يعد إعداد إدارة جلسة SAML لتقليد حدث مهلة SP على مستوى IDP وضمان عمليات تسجيل الخروج المتزامنة إحدى الطرق لتقليل هذه المخاطر.
يعد تنفيذ كود الواجهة الأمامية لتقنيات الكشف عن الخمول عاملاً آخر. يمكن للمطورين توقع أوقات عدم النشاط وتنبيه المستخدمين قبل انتهاء صلاحية الجلسة باستخدام مستمعي الأحداث لنشاط المستخدم. باستخدام هذا، يمكن للمستخدمين الاحتفاظ بالتحكم في جلساتهم والتأكد من أن جلساتهم جلسة الدخول الموحّد (SSO). لا يعمل بشكل مستمر. في بيئة SSO المتكاملة، يمكن للمطورين الحفاظ على الأمان وراحة المستخدم من خلال تحقيق التوازن بين هذه العوامل.
الأسئلة الشائعة حول SAML 2.0 SLO ومهلة الجلسة
- ماذا يحدث على مستوى مزود الخدمة عند انتهاء مهلة الجلسة؟
- عادةً، يتم تسجيل خروج المستخدم من البرنامج عند انتهاء مهلة الجلسة على مستوى SP. يعتمد ذلك على كيفية إعداد النظام، حيث أن مواصفات SAML 2.0 لا تتطلب أن يتسبب ذلك في حدوث SLO عند IDP.
- هل يجب تشغيل SLO في موفر الهوية من خلال انتهاء مهلة جلسة موفر الخدمة؟
- سياسة المنظمة تحكم هذا. على الرغم من أن SAML 2.0 لا يفرض ذلك، إلا أن الكثيرين يختارون تشغيل SLO عند IDP عند انتهاء جلسة SP لأسباب أمنية.
- عندما تنتهي الجلسة غير النشطة، كيف يمكنني تفعيل SLO؟
- يمكن اكتشاف انتهاء صلاحية الجلسة عبر آلية الواجهة الخلفية، والتي تبدأ بعد ذلك عملية create_logout_request_url() إجراء تقديم طلب SLO إلى IDP.
- كيف يتم اكتشاف عدم نشاط الجلسة على الواجهة الأمامية؟
- مستمعي الحدث مثل onmousemove و onkeypress تُستخدم بشكل شائع لتتبع عدم النشاط حيث يتم إعادة تعيين المؤقت في كل مرة يتفاعل فيها المستخدم مع التطبيق.
- بعد تسجيل الخروج من مقدم الخدمة، هل من الآمن أن تكون جلسة IDP مفتوحة؟
- قد تنشأ مخاطر أمنية من ترك جلسة IDP مفتوحة، خاصة إذا كان المستخدم يعتقد أنه قام بالخروج بالكامل. يُنصح بإعداد SLO لتكرار انتهاء صلاحية جلسة SP.
اختتام إدارة مهلة جلسة SAML 2.0
يتطلب الحفاظ على الأمان في نظام الدخول الموحد (SSO) التأكد من قيام موفر الهوية وموفر الخدمة بمزامنة عمليات تسجيل الخروج الخاصة بهما. على الرغم من أن SAML 2.0 لا يفرض كيفية التعامل مع مهلات الجلسة، إلا أن الكثير من الشركات تتعامل مع عمليات تسجيل الخروج الفردية بطريقة موحدة.
يُنصح بإرسال طلب SLO في كل مرة تنتهي فيها جلسة موفر الخدمة بسبب عدم النشاط لتحسين الأمان. ويضمن هذا أن المستخدم قد قام بتسجيل الخروج من موفر الهوية وكذلك من التطبيق، مما يتجنب الوصول غير المرغوب فيه إلى العديد من الأنظمة الأساسية.
المراجع والمصادر لأفضل ممارسات SAML 2.0
- يمكن العثور على الوثائق التفصيلية حول معايير وإرشادات SAML 2.0 وتسجيل الخروج الفردي في الموقع الرسمي مواصفات OASIS SAML 2.0 الأساسية .
- للحصول على رؤى حول Microsoft Entra وتكامله مع SSO وSLO، راجع وثائق Microsoft الرسمية على Azure Active Directory وSAML .
- يمكن استكشاف مكتبة Node.js SAML المستخدمة في الأمثلة، إلى جانب تقنيات إدارة الجلسة، بشكل أكبر على الموقع وثائق مكتبة SAML2-js .
- لفهم أفضل الممارسات في تكوين الدخول الموحد وإدارة الجلسة، تفضل بزيارة المقالة حول أفضل ممارسات تسجيل الدخول الموحد (SSO). بواسطة Auth0.