Memahami SAML 2.0 Single Log Out Setelah Batas Waktu Sesi
Karena sistem SAML 2.0 Single Sign-On (SSO) memungkinkan pengguna untuk masuk ke berbagai aplikasi menggunakan satu set kredensial, sistem ini telah menyederhanakan autentikasi pengguna secara signifikan. Namun ada juga masalah yang signifikan dengan gagasan Single Log Out (SLO), terutama berkaitan dengan apa yang terjadi ketika sesi pengguna berakhir di Penyedia Layanan (SP) karena mereka belum login. Dalam hal ini, Penyedia Identitas harus Sesi (IDP) juga berakhir?
Manajemen sesi antara SP dan IDP sangat penting untuk memastikan akses yang aman dan efisien dalam konteks SAML 2.0. Tidak selalu jelas kapan sesi SP berakhir apakah pengguna masih terhubung ke IDP, yang dapat berdampak pada aplikasi lain yang terhubung ke IDP yang sama. Hal ini menimbulkan pertanyaan tentang kegunaan dan keamanan.
Praktik terbaik yang jelas untuk menangani waktu tunggu sesi ini perlu diterapkan oleh banyak bisnis, terutama yang menggunakan antarmuka seperti Microsoft Entra. Apakah lebih baik sesi SP dihentikan hanya pada tingkat SP, atau haruskah sesi ini juga menghasilkan SLO yang mengeluarkan pengguna dari akun IDP mereka?
Dengan menggunakan contoh dunia nyata untuk mengilustrasikan teknik paling efisien dalam menangani waktu tunggu sesi dan menjamin keamanan dan kegunaan, makalah ini mengkaji praktik standar dan standar untuk menangani peristiwa SAML 2.0 SLO dalam situasi seperti itu.
Memerintah | Contoh penggunaan |
---|---|
session() | Digunakan dalam aplikasi Express untuk mengontrol sesi pengguna. Dalam contohnya, ini membantu dalam memantau aktivitas pengguna dan waktu tunggu sesi sehingga logika logout dapat dipicu saat diperlukan. |
maxAge | Menentukan jangka waktu validitas cookie sesi. Dalam hal ini, pengatur waktu diatur untuk berakhir setelah 600.000 milidetik, atau 10 menit, dan memulai peristiwa logout. |
create_logout_request_url() | Ketika sesi Penyedia Layanan berakhir, URL permintaan Single Log Out (SLO) yang dibuat dengan metode pustaka SAML2 ini diteruskan ke Penyedia Identitas (IDP). |
readFileSync() | Membaca file kunci dan sertifikat secara sinkron, yang diperlukan untuk menyiapkan Penyedia Layanan SAML2. Agar Penyedia Layanan dan Penyedia Identitas dapat berkomunikasi dengan aman, sertifikasi ini diperlukan. |
assert_endpoint | Menunjukkan URL yang, setelah autentikasi berhasil, akan digunakan oleh Penyedia Identitas untuk mengirimkan pernyataan SAML. Dengan melakukan ini, tingkat otentikasi pengguna Penyedia Layanan dijamin. |
window.onload | Acara ini digunakan untuk mengatur ulang pengatur waktu tidak aktif sesi di frontend. Ini memastikan bahwa ketika pengguna memuat program untuk pertama kalinya, pengatur waktu dimulai kembali. |
onmousemove | Untuk mengatur ulang penghitung waktu sesi, pendengar acara ini mendeteksi gerakan mouse apa pun. Penting untuk mengawasi perilaku pengguna dan mencegah waktu tunggu sesi yang tidak disengaja. |
fetch() | Digunakan untuk mengirim permintaan SLO secara asinkron, setelah waktu habis sesi, ke server. Untuk terhubung dengan Penyedia Identitas dan mengeluarkan pengguna dari IDP, logika backend akan diaktifkan. |
setTimeout() | Fungsi dalam kode frontend ini menyebabkan peristiwa batas waktu sesi terjadi setelah jumlah ketidakaktifan yang telah ditentukan. Penting untuk mengawasi perilaku pengguna dan menerapkan peraturan keamanan. |
Mengoptimalkan Single Log Out dengan Penanganan Timeout Sesi SAML 2.0
Menggunakan Node.js dan Express, skrip backend untuk menangani Single Log Out (SLO) berfokus pada kemampuan melacak kedaluwarsa sesi pengguna dan memulai urutan logout di tingkat Penyedia Layanan (SP) dan Penyedia Identitas (IDP). Pengelolaan sesi Ekspres merupakan inti dari alasan ini. Kami menetapkan titik pemicu dengan mengatur sesi untuk berakhir setelah jumlah ketidakaktifan yang telah ditentukan—sepuluh menit, dalam contoh kami. Saat sesi berakhir, skrip menggunakan metode `create_logout_request_url()} untuk memulai permintaan logout SAML 2.0, yang kemudian menghubungkan ke IDP (dalam hal ini, Masuk Microsoft) untuk mengakhiri sesi pengguna sepenuhnya. Hal ini meningkatkan keamanan dengan menjamin bahwa pengguna telah keluar sepenuhnya dari sistem.
Kami memuat Sertifikat SAML dan kunci ke dalam aplikasi menggunakan perintah `readFileSync()} untuk mengaktifkan komunikasi aman antara SP (MyApp) dan IDP (Microsoft Entra). Dengan mengautentikasi permintaan logout, sertifikat ini melindungi terhadap logout ilegal dan menjamin bahwa komunikasi tetap terenkripsi dan terkonfirmasi. Pengguna dikirim ke URL permintaan logout setelah dibuat, di mana IDP menangani logout dan, jika diperlukan, mengakhiri sesi pengguna di semua aplikasi terkait. Menjaga keamanan dan integritas instalasi Single Sign-On (SSO) multi-aplikasi memerlukan komunikasi dua arah ini.
Skrip JavaScript sangat penting untuk melacak aktivitas pengguna secara real time di front end. Setiap kali pengguna berinteraksi dengan program, kami menyetel ulang batas waktu sesi dengan menggunakan pendengar peristiwa seperti `onmousemove} dan `onkeypress`. Pengatur waktu yang disetel dengan `setTimeout()` memperingatkan pengguna dan secara otomatis mengeluarkan mereka dari SP (MyApp) ketika pengguna tidak aktif. Setelah logout, proses logout SAML 2.0 yang telah dibahas sebelumnya dimulai dengan skrip frontend mengirimkan permintaan SLO ke backend menggunakan `fetch()`. Teknik ini memastikan bahwa ketidakaktifan di tingkat SP ditangani dengan cepat, aman, dan tanpa kegagalan.
Ketika integrasi SAML 2.0 dan manajemen sesi digabungkan, pengalaman pengguna lancar dan standar keamanan dijunjung tinggi. Untuk mencegah pengguna tetap diautentikasi lebih lama dari yang diizinkan selama tidak aktif, batas waktu sesi memulai logout SP lokal dan logout IDP. Meskipun SAML 2.0 tidak memerlukan perilaku khusus apa pun sehubungan dengan waktu tunggu sesi, penggunaan berakhirnya sesi untuk memulai SLO secara umum diterima sebagai praktik terbaik. Dengan mengakhiri sesi menganggur, ini mencapai keseimbangan antara keamanan dan pengalaman pengguna dengan memungkinkan logout tersinkronisasi di berbagai platform yang terhubung dengan SSO.
Menggunakan Node.js dan Express untuk Menangani Single Log Out SAML 2.0 dengan Batas Waktu Sesi
Metode backend untuk mengelola SAML 2.0 SLO dengan batas waktu sesi Penyedia Layanan menggunakan Node.js dan Express. Solusi ini menggunakan permintaan SAML untuk memeriksa apakah sesi telah kedaluwarsa dan memulai SLO di tingkat Penyedia Identitas.
// 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 Frontend JavaScript dan Deteksi Batas Waktu Idle untuk Menangani SLO SAML 2.0
Dalam metode frontend, batas waktu sesi dideteksi dengan memanfaatkan vanilla JavaScript untuk memantau ketidakaktifan pengguna dan memulai Single Log Out (SLO). Hal ini memberitahu Penyedia Layanan untuk mengeluarkan permintaan SLO ke Penyedia Identitas.
// 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));
}
Menjelajahi SAML 2.0: Single Log Out dan Timeout Tidak Aktif
Bagaimana alamat SAML 2.0 Single Log Out (SLO). ketidakaktifan di tingkat Penyedia Layanan (SP) merupakan komponen penting untuk dikelola. Meskipun jelas bahwa logout manual di SP juga menyebabkan logout Penyedia Identitas (IDP), waktu tunggu sesi yang disebabkan oleh tidak adanya aktivitas memperumit masalah. Standar SAML 2.0 tidak menyatakan dengan jelas bagaimana SLO harus ditangani pada sesi berakhir. Namun, hal ini memungkinkan penerapan praktik terbaik yang dapat meningkatkan pengalaman dan keamanan pengguna.
Misalnya, bahkan setelah SP ditutup karena tidak ada aktivitas, pengguna yang masuk ke aplikasi seperti MyApp melalui Microsoft Entra (IDP) sering kali tetap masuk ke IDP. Jika pengguna yakin bahwa mereka telah logout sepenuhnya sementara aplikasi lain yang menggunakan SSO yang sama masih berjalan, hal ini dapat meningkat masalah keamanan. Menyiapkan manajemen sesi SAML untuk meniru peristiwa batas waktu SP di tingkat IDP dan menjamin logout yang tersinkronisasi adalah salah satu cara untuk mengurangi risiko ini.
Penerapan teknik deteksi idle kode frontend adalah faktor lainnya. Pengembang dapat mengantisipasi saat tidak ada aktivitas dan memperingatkan pengguna sebelum sesi berakhir dengan menggunakan event listening untuk aktivitas pengguna. Dengan menggunakan ini, pengguna dapat tetap mengontrol sesi mereka dan memastikan sesi mereka tetap berjalan sesi SSO tidak berjalan terus menerus. Dalam lingkungan yang terintegrasi SSO, pengembang dapat menjaga keamanan dan kenyamanan pengguna dengan menyeimbangkan faktor-faktor ini.
Pertanyaan Umum tentang SLO SAML 2.0 dan Batas Waktu Sesi
- Apa yang terjadi di tingkat Penyedia Layanan ketika waktu sesi habis?
- Biasanya, pengguna keluar dari program ketika sesi di level SP habis. Namun hal ini bergantung pada cara sistem disiapkan, karena spesifikasi SAML 2.0 tidak mengharuskan hal ini menyebabkan SLO pada IDP.
- Haruskah SLO di Penyedia Identitas dipicu oleh waktu habis sesi Penyedia Layanan?
- Kebijakan organisasi mengatur hal ini. Meskipun SAML 2.0 tidak mewajibkannya, banyak yang memilih untuk mengaktifkan SLO di IDP ketika sesi SP berakhir karena alasan keamanan.
- Ketika sesi tidak aktif berakhir, bagaimana cara mewujudkan SLO?
- Kedaluwarsa sesi dapat dideteksi melalui mekanisme backend, yang kemudian memulai a create_logout_request_url() prosedur untuk membuat permintaan SLO ke IDP.
- Bagaimana ketidakaktifan sesi terdeteksi di frontend?
- Pendengar acara seperti onmousemove Dan onkeypress biasanya digunakan untuk melacak ketidakaktifan karena menyetel ulang pengatur waktu setiap kali pengguna berinteraksi dengan aplikasi.
- Setelah keluar dari SP, apakah sesi IDP aman untuk dibuka?
- Risiko keamanan mungkin timbul jika sesi IDP dibiarkan terbuka, terutama jika pengguna yakin bahwa mereka telah melakukan check out sepenuhnya. Menyiapkan SLO untuk mereplikasi berakhirnya sesi SP disarankan.
Menyelesaikan Manajemen Batas Waktu Sesi SAML 2.0
Menjaga keamanan dalam sistem SSO memerlukan memastikan bahwa Penyedia Identitas dan Penyedia Layanan menyinkronkan proses logout mereka. Meskipun SAML 2.0 tidak mewajibkan penanganan waktu tunggu sesi, banyak bisnis yang menangani logout tunggal dengan cara yang seragam.
Disarankan untuk mengirimkan permintaan SLO setiap kali sesi Penyedia Layanan berakhir karena tidak ada aktivitas untuk meningkatkan keamanan. Hal ini memastikan bahwa pengguna telah keluar dari Penyedia Identitas serta aplikasi, menghindari akses yang tidak diinginkan di banyak platform.
Referensi dan Sumber Praktik Terbaik SAML 2.0
- Dokumentasi terperinci tentang standar dan pedoman SAML 2.0 dan Single Log Out dapat ditemukan di situs resmi Spesifikasi Inti OASIS SAML 2.0 .
- Untuk wawasan tentang Microsoft Entra dan integrasinya dengan SSO dan SLO, lihat dokumentasi resmi Microsoft di Azure Active Directory dan SAML .
- Pustaka SAML Node.js yang digunakan dalam contoh, beserta teknik manajemen sesi, dapat dieksplorasi lebih lanjut di Dokumentasi Perpustakaan SAML2-js .
- Untuk memahami praktik terbaik dalam mengonfigurasi Sistem Masuk Tunggal dan manajemen sesi, kunjungi artikel di Praktik Terbaik SSO oleh Auth0.