Memahami Log Keluar Tunggal SAML 2.0 Selepas Tamat Masa Sesi
Oleh kerana sistem SAML 2.0 Single Sign-On (SSO) membenarkan pengguna melog masuk ke pelbagai aplikasi menggunakan satu set bukti kelayakan, mereka telah memudahkan pengesahan pengguna dengan ketara. Tetapi terdapat juga isu penting dengan tanggapan Log Keluar Tunggal (SLO), terutamanya berkenaan dengan perkara yang berlaku apabila sesi pengguna tamat tempoh di Pembekal Perkhidmatan (SP) kerana mereka belum log masuk. Dalam kes ini, sekiranya Pembekal Identiti (IDP) sesi berakhir juga?
Pengurusan sesi antara SP dan IDP adalah penting untuk memastikan akses yang selamat dan cekap dalam konteks SAML 2.0. Ia tidak selalunya jelas apabila sesi SP tamat jika pengguna masih perlu disambungkan ke IDP, yang boleh memberi kesan pada apl lain yang dipautkan kepada IDP yang sama. Ini menimbulkan persoalan tentang kebolehgunaan serta keselamatan.
Amalan terbaik yang jelas untuk mengendalikan tamat masa sesi ini perlu diwujudkan oleh banyak perniagaan, terutamanya perniagaan yang menggunakan antara muka seperti Microsoft Entra. Adakah lebih baik sesi SP berhenti hanya pada peringkat SP, atau patutkah ia juga mengakibatkan SLO yang melog pengguna keluar daripada akaun IDP mereka?
Menggunakan contoh dunia sebenar untuk menggambarkan teknik paling cekap untuk mengendalikan tamat masa sesi dan menjamin keselamatan dan kebolehgunaan, kertas kerja ini mengkaji amalan dan piawaian standard untuk mengendalikan acara SAML 2.0 SLO dalam situasi sedemikian.
Perintah | Contoh penggunaan |
---|---|
session() | Digunakan dalam aplikasi Express untuk mengawal sesi pengguna. Dalam contoh, ia membantu dalam memantau aktiviti pengguna dan tamat masa sesi supaya logik log keluar boleh dicetuskan apabila diperlukan. |
maxAge | Menentukan jangka masa bahawa kuki sesi adalah sah. Dalam keadaan ini, pemasa ditetapkan untuk tamat tempoh selepas 600000 milisaat atau 10 minit dan memulakan acara log keluar. |
create_logout_request_url() | Apabila sesi Penyedia Perkhidmatan ditamatkan, URL permintaan Log Keluar Tunggal (SLO) yang dibuat oleh kaedah perpustakaan SAML2 ini dimajukan kepada Penyedia Identiti (IDP). |
readFileSync() | Membaca fail dan sijil utama secara serentak, yang diperlukan untuk menyediakan Pembekal Perkhidmatan SAML2. Untuk Pembekal Perkhidmatan dan Pembekal Identiti berkomunikasi dengan selamat, pensijilan ini diperlukan. |
assert_endpoint | Menunjukkan URL yang, selepas pengesahan yang berjaya, Penyedia Identiti akan gunakan untuk menghantar penegasan SAML. Dengan melakukan ini, tahap pengesahan pengguna Pembekal Perkhidmatan dijamin. |
window.onload | Acara ini digunakan untuk menetapkan semula pemasa tidak aktif sesi di bahagian hadapan. Ia memastikan bahawa apabila pengguna memuatkan program untuk kali pertama, pemasa dimulakan semula. |
onmousemove | Untuk menetapkan semula pemasa sesi, pendengar acara ini mengesan sebarang pergerakan tetikus. Ia penting untuk mengawasi tingkah laku pengguna dan mengelakkan tamat masa sesi yang tidak disengajakan. |
fetch() | Digunakan untuk menghantar permintaan SLO secara tak segerak, selepas tamat masa sesi, ke pelayan. Untuk berhubung dengan Pembekal Identiti dan log keluar pengguna daripada IDP, ia mematikan logik bahagian belakang. |
setTimeout() | Fungsi dalam kod bahagian hadapan ini menyebabkan peristiwa tamat masa sesi berlaku selepas jumlah ketidakaktifan yang telah ditetapkan. Ia adalah penting untuk mengawasi tingkah laku pengguna dan melaksanakan peraturan keselamatan. |
Mengoptimumkan Log Keluar Tunggal dengan Pengendalian Tamat Masa Sesi SAML 2.0
menggunakan Node.js dan Express, skrip bahagian belakang untuk mengendalikan Log Keluar Tunggal (SLO) memfokuskan pada keupayaan untuk menjejaki tamat tempoh sesi pengguna dan memulakan urutan log keluar pada peringkat Penyedia Perkhidmatan (SP) dan Penyedia Identiti (IDP). Pengurusan sesi Ekspres terletak di tengah-tengah alasan ini. Kami mewujudkan titik pencetus dengan menetapkan sesi untuk ditamatkan selepas jumlah ketidakaktifan yang telah ditetapkan—sepuluh minit, dalam contoh kami. Apabila sesi tamat, skrip menggunakan kaedah `create_logout_request_url()} untuk memulakan permintaan log keluar SAML 2.0, yang kemudiannya bersambung kepada IDP (dalam kes ini, Microsoft Entra) untuk menamatkan sesi pengguna sepenuhnya. Ini meningkatkan keselamatan dengan menjamin bahawa pengguna telah log keluar sepenuhnya daripada sistem.
Kami memuatkan Sijil SAML dan kekunci ke dalam aplikasi menggunakan arahan `readFileSync()} untuk membolehkan komunikasi selamat antara SP (MyApp) dan IDP (Microsoft Entra). Dengan mengesahkan permintaan log keluar, sijil ini melindungi daripada log keluar haram dan menjamin bahawa komunikasi itu kekal disulitkan dan disahkan. Pengguna dihantar ke URL permintaan log keluar selepas ia dijana, di mana IDP mengendalikan log keluar dan, jika perlu, menamatkan sesi pengguna merentas mana-mana aplikasi yang berkaitan. Mengekalkan keselamatan dan integriti pemasangan Single Sign-On (SSO) berbilang aplikasi memerlukan komunikasi dua hala ini.
Skrip JavaScript adalah penting untuk menjejak aktiviti pengguna dalam masa nyata di bahagian hadapan. Setiap kali pengguna berinteraksi dengan program, kami menetapkan semula tamat masa sesi dengan menggunakan pendengar acara seperti `onmousemove} dan `onkeypress`. Pemasa yang telah ditetapkan dengan `setTimeout()` memberi amaran kepada pengguna dan log mereka keluar secara automatik daripada SP (MyApp) apabila pengguna menjadi melahu. Selepas log keluar, proses log keluar SAML 2.0 yang sebelum ini diliputi dimulakan oleh skrip bahagian hadapan yang menghantar permintaan SLO ke bahagian belakang menggunakan `fetch()`. Teknik ini memastikan ketidakaktifan di peringkat SP ditangani dengan segera, selamat dan tanpa gagal.
Apabila integrasi SAML 2.0 dan pengurusan sesi digabungkan, pengalaman pengguna adalah lancar dan piawaian keselamatan ditegakkan. Untuk mengelakkan pengguna daripada kekal disahkan lebih lama daripada yang dibenarkan semasa tidak aktif, tamat masa sesi memulakan kedua-dua log keluar SP tempatan dan log keluar IDP. Walaupun SAML 2.0 tidak memerlukan sebarang kelakuan tertentu berhubung dengan tamat masa sesi, ia secara amnya diterima sebagai amalan terbaik untuk menggunakan tamat tempoh sesi untuk memulakan SLO. Dengan menamatkan sesi melahu, ia mencapai keseimbangan antara keselamatan dan pengalaman pengguna dengan mendayakan log keluar disegerakkan merentas pelbagai platform yang berkaitan dengan SSO.
Menggunakan Node.js dan Express untuk Mengendalikan Log Keluar Tunggal SAML 2.0 dengan Tamat Masa Sesi
Kaedah hujung belakang untuk mengurus SAML 2.0 SLO dengan tamat masa sesi Penyedia Perkhidmatan menggunakan Node.js dan Express. Penyelesaian ini menggunakan permintaan SAML untuk menyemak sama ada sesi telah tamat tempoh dan memulakan SLO di peringkat Penyedia Identiti.
// 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");
});
Menggunakan JavaScript Frontend dan Pengesanan Tamat Masa Melahu untuk Mengendalikan SAML 2.0 SLO
Dalam kaedah frontend, tamat masa sesi dikesan dengan menggunakan JavaScript vanila untuk memantau ketidakaktifan pengguna dan memulakan Log Keluar Tunggal (SLO). Ini memberitahu Pembekal Perkhidmatan untuk mengeluarkan permintaan SLO kepada Pembekal Identiti.
// 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));
}
Meneroka SAML 2.0: Log Keluar Tunggal dan Tamat Masa Tidak Beraktif
Cara SAML 2.0 Log Keluar Tunggal (SLO) menangani tidak aktif di peringkat Pembekal Perkhidmatan (SP) adalah komponen penting untuk diuruskan. Walaupun jelas bahawa log keluar manual di SP sepatutnya menyebabkan logo keluar Identity Provider (IDP) juga, tamat masa sesi yang disebabkan oleh ketidakaktifan merumitkan perkara. Piawaian SAML 2.0 tidak menyatakan dengan jelas cara SLO harus dikendalikan pada tamat tempoh sesi. Ini, walau bagaimanapun, membenarkan penggunaan amalan terbaik yang boleh meningkatkan pengalaman dan keselamatan pengguna.
Sebagai contoh, walaupun selepas ditutup daripada SP kerana tidak aktif, pengguna yang log masuk ke aplikasi seperti MyApp melalui Microsoft Entra (IDP) kerap kekal log masuk ke IDP. Jika pengguna percaya mereka telah log keluar sepenuhnya sementara apl lain yang menggunakan SSO yang sama masih berjalan, ini boleh meningkatkan kebimbangan keselamatan. Menyediakan pengurusan sesi SAML untuk meniru acara tamat masa SP di peringkat IDP dan menjamin log keluar disegerakkan ialah satu cara untuk mengurangkan risiko ini.
Pelaksanaan teknik pengesanan terbiar kod hadapan adalah faktor lain. Pembangun boleh menjangkakan masa tidak aktif dan memaklumkan pengguna sebelum sesi tamat dengan menggunakan pendengar acara untuk aktiviti pengguna. Dengan menggunakan ini, pengguna boleh mengekalkan kawalan ke atas sesi mereka dan memastikan sesi mereka sesi SSO tidak berjalan secara berterusan. Dalam persekitaran bersepadu SSO, pembangun boleh memelihara keselamatan dan keselesaan pengguna dengan mencapai keseimbangan antara faktor-faktor ini.
Soalan Lazim tentang SAML 2.0 SLO dan Tamat Masa Sesi
- Apakah yang berlaku di peringkat Pembekal Perkhidmatan apabila sesi tamat?
- Biasanya, pengguna dilog keluar daripada program apabila sesi tamat pada tahap SP. Ia bergantung pada cara sistem disediakan, walaupun, kerana spesifikasi SAML 2.0 tidak memerlukan ini menyebabkan SLO di IDP.
- Patutkah SLO di Pembekal Identiti dicetuskan oleh tamat masa sesi Penyedia Perkhidmatan?
- Dasar organisasi mengawal ini. Walaupun SAML 2.0 tidak mewajibkannya, ramai yang memilih untuk menghentikan SLO di IDP apabila sesi SP tamat atas sebab keselamatan.
- Apabila sesi tidak aktif tamat, bagaimana saya boleh membuat SLO berlaku?
- Tamat tempoh sesi boleh dikesan melalui mekanisme hujung belakang, yang kemudiannya memulakan a create_logout_request_url() prosedur untuk membuat permintaan SLO kepada IDP.
- Bagaimanakah ketidakaktifan sesi dikesan pada bahagian hadapan?
- Pendengar acara seperti sebagai onmousemove dan onkeypress biasanya digunakan untuk mengesan ketidakaktifan kerana mereka menetapkan semula pemasa setiap kali pengguna berinteraksi dengan aplikasi.
- Selepas log keluar dari SP, adakah selamat untuk sesi IDP dibuka?
- Risiko keselamatan mungkin timbul daripada membiarkan sesi IDP terbuka, terutamanya jika pengguna percaya mereka telah mendaftar keluar sepenuhnya. Menyediakan SLO untuk meniru tamat tempoh sesi SP adalah dinasihatkan.
Mengakhiri Pengurusan Masa Sesi SAML 2.0
Mengekalkan keselamatan dalam sistem SSO memerlukan memastikan bahawa Pembekal Identiti dan Pembekal Perkhidmatan menyegerakkan proses log keluar mereka. Walaupun SAML 2.0 tidak mewajibkan cara tamat masa sesi harus dikendalikan, banyak perniagaan mengendalikan log keluar tunggal dengan cara yang seragam.
Adalah dinasihatkan untuk menghantar permintaan SLO setiap kali sesi Pembekal Perkhidmatan tamat kerana tidak aktif untuk meningkatkan keselamatan. Ini memastikan bahawa pengguna telah log keluar daripada Pembekal Identiti serta aplikasi, mengelakkan akses yang tidak diingini pada banyak platform.
Rujukan dan Sumber untuk Amalan Terbaik SAML 2.0
- Dokumentasi terperinci mengenai standard dan garis panduan SAML 2.0 dan Log Keluar Tunggal boleh didapati di laman rasmi Spesifikasi Teras OASIS SAML 2.0 .
- Untuk mendapatkan pandangan tentang Microsoft Entra dan penyepaduannya dengan SSO dan SLO, rujuk dokumentasi rasmi Microsoft tentang Direktori Aktif Azure dan SAML .
- Pustaka SAML Node.js yang digunakan dalam contoh, bersama-sama dengan teknik pengurusan sesi, boleh diterokai lebih lanjut di Dokumentasi Perpustakaan SAML2-js .
- Untuk memahami amalan terbaik dalam mengkonfigurasi Log Masuk Tunggal dan pengurusan sesi, lawati artikel tentang Amalan Terbaik SSO oleh Auth0.