Förstå SAML 2.0 Single Log Out efter sessionstimeout
Eftersom SAML 2.0 Single Sign-On (SSO)-system tillåter användare att logga in på olika applikationer med en enda uppsättning autentiseringsuppgifter, har de avsevärt förenklat användarautentisering. Men det finns också betydande problem med begreppet Single Log Out (SLO), särskilt med hänsyn till vad som händer när en användares session löper ut hos en tjänsteleverantör (SP) eftersom de inte har loggat in. I det här fallet bör identitetsleverantören (IDP) session slut också?
Sessionshantering mellan SP och IDP är avgörande för att säkerställa säker och effektiv åtkomst i SAML 2.0-sammanhang. Det är inte alltid självklart när en SP-session avslutas om användaren fortfarande ska vara ansluten till IDP, vilket kan påverka andra appar som är länkade till samma IDP. Detta väcker frågor om användbarhet såväl som säkerhet.
En tydlig bästa praxis för att hantera dessa tidsgränser för sessioner måste etableras av många företag, särskilt de som använder gränssnitt som Microsoft Entra. Är det bättre att en SP:s session bara stannar på SP-nivå, eller bör det också resultera i en SLO som loggar ut användaren från deras IDP-konto?
Med hjälp av verkliga exempel för att illustrera de mest effektiva teknikerna för att hantera sessionstimeout och garantera både säkerhet och användbarhet, undersöker detta dokument standardpraxis och standarder för hantering av SAML 2.0 SLO-händelser i sådana situationer.
Kommando | Exempel på användning |
---|---|
session() | Används i Express-applikationen för att kontrollera användarsessioner. I exemplet hjälper den till med att övervaka användaraktivitet och sessionstimeout så att utloggningslogik kan utlösas vid behov. |
maxAge | Anger tidsramen som sessionskakan är giltig. I det här fallet är timern inställd på att löpa ut efter 600 000 millisekunder, eller 10 minuter, och initiera en utloggningshändelse. |
create_logout_request_url() | När tjänsteleverantörssessionen avslutas vidarebefordras URL:en för enkel utloggning (SLO) som skapats av denna SAML2-biblioteksmetod till identitetsleverantören (IDP). |
readFileSync() | Läser nyckelfilerna och certifikaten synkront, vilket är nödvändigt för att konfigurera SAML2-tjänsteleverantören. För att tjänsteleverantören och identitetsleverantören ska kunna kommunicera säkert är dessa certifieringar nödvändiga. |
assert_endpoint | Indikerar den URL som, efter framgångsrik autentisering, identitetsleverantören kommer att använda för att överföra SAML-påståendet. Genom att göra detta garanteras tjänsteleverantörens autentiseringsnivå. |
window.onload | Denna händelse används för att återställa sessionsinaktivitetstimern i frontend. Den ser till att timern startar om när användaren laddar programmet för första gången. |
onmousemove | För att återställa sessionstimern upptäcker denna händelseavlyssnare alla musrörelser. Det är viktigt för att hålla ett öga på användarbeteende och undvika oavsiktliga sessionstimeout. |
fetch() | Används för att asynkront skicka en SLO-begäran, efter sessionens timeout, till servern. För att ansluta till identitetsleverantören och logga ut användaren från IDP:n aktiverar den backend-logiken. |
setTimeout() | Denna funktion i frontendkoden gör att sessionstimeouthändelsen inträffar efter den förutbestämda mängden inaktivitet. Det är viktigt för att hålla ett öga på användarbeteende och implementera säkerhetsföreskrifter. |
Optimera Single Log Out med SAML 2.0 Session Timeout Hantering
Använder Node.js och Express, backend-skriptet för hantering av Single Log Out (SLO) fokuserar på möjligheten att spåra användarsessionens utgång och initiera en utloggningssekvens på nivåerna Service Provider (SP) och Identity Provider (IDP). Hantering av Express-sessioner är kärnan i detta resonemang. Vi upprättar en triggerpunkt genom att ställa in sessionen så att den avslutas efter en förutbestämd mängd inaktivitet – tio minuter i vårt exempel. När sessionen avslutas använder skriptet metoden `create_logout_request_url()} för att starta en SAML 2.0-utloggningsbegäran, som sedan ansluter till IDP (i det här fallet, Microsoft Entra) för att avsluta användarsessionen helt. Detta ökar säkerheten genom att garantera att användaren har loggat ut helt ur systemet.
Vi laddar SAML-certifikat och knappar in i applikationen med kommandot `readFileSync()} för att möjliggöra säker kommunikation mellan SP (MyApp) och IDP (Microsoft Entra). Genom att autentisera utloggningsförfrågan skyddar dessa certifikat mot olagliga utloggningar och garanterar att kommunikationen förblir krypterad och bekräftad. Användaren skickas till URL-adressen för utloggningsförfrågan efter att den har genererats, där IDP hanterar utloggningen och, om så krävs, avslutar användarens session över alla associerade applikationer. För att upprätthålla säkerheten och integriteten för installationer med enkel inloggning med flera applikationer (SSO) krävs denna tvåvägskommunikation.
JavaScript-skriptet är viktigt för att spåra användaraktiviteter i realtid på användargränssnittet. Varje gång användaren interagerar med programmet, återställer vi sessionens timeout genom att använda händelseavlyssnare som 'onmousemove} och 'onkeypress'. En timer som ställdes in med `setTimeout()` varnar användaren och loggar automatiskt ut dem från SP (MyApp) när användaren blir inaktiv. Efter utloggning startas SAML 2.0-utloggningsprocessen som tidigare täckts av att frontend-skriptet skickar en SLO-begäran till backend med `fetch()`. Denna teknik säkerställer att inaktivitet på SP-nivå åtgärdas snabbt, säkert och utan misslyckande.
När SAML 2.0 integration och sessionshantering kombineras, är användarupplevelsen sömlös och säkerhetsstandarder upprätthålls. För att förhindra att användaren förblir autentiserad längre än vad som är tillåtet under inaktivitet, initierar sessionstimeouten både den lokala SP-utloggningen och IDP-utloggningen. Även om SAML 2.0 inte kräver något särskilt beteende när det gäller sessionstimeout, är det allmänt accepterat som en bästa praxis att använda sessionsutgång för att initiera SLO. Genom att avsluta lediga sessioner uppnår den en balans mellan säkerhet och användarupplevelse genom att möjliggöra synkroniserade utloggningar över olika SSO-anslutna plattformar.
Använda Node.js och Express för att hantera SAML 2.0 Single Log Out med Session Timeout
Backend-metod för att hantera SAML 2.0 SLO med tidsgränser för tjänsteleverantörssessioner med användning av Node.js och Express. Den här lösningen använder SAML-förfrågningar för att kontrollera om sessionen har löpt ut och initiera SLO på identitetsleverantörsnivå.
// 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");
});
Använda JavaScript Frontend och Idle Timeout Detection för att hantera SAML 2.0 SLO
I en frontend-metod upptäcks en sessionstimeout genom att använda vanilla JavaScript för att övervaka användarinaktivitet och initiera Single Log Out (SLO). Detta talar om för tjänsteleverantören att utfärda en SLO-förfrågan till identitetsleverantören.
// 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));
}
Utforska SAML 2.0: Enkel utloggning och tidsgräns för inaktivitet
Hur SAML 2.0 Single Log Out (SLO) adresserar inaktivitet på tjänsteleverantörsnivå (SP) är en kritisk komponent att hantera. Även om det är uppenbart att en manuell utloggning hos SP också bör orsaka utloggning av en identitetsleverantör (IDP), komplicerar sessionstimeouts som orsakas av inaktivitet saken. SAML 2.0-standarden anger inte tydligt hur SLO ska hanteras när sessionen löper ut. Detta möjliggör dock antagandet av bästa praxis som kan förbättra användarupplevelsen och säkerheten.
Till exempel, även efter att ha stängts ut från SP på grund av inaktivitet, förblir användare som loggar in på en applikation som MyApp via Microsoft Entra (IDP) ofta inloggade på IDP. Om användaren tror att de är helt utloggade medan andra appar som använder samma SSO fortfarande körs, kan detta öka säkerhetsproblem. Att ställa in SAML-sessionshantering för att efterlikna SP-timeouthändelsen på IDP-nivå och garantera synkroniserade utloggningar är ett sätt att minska denna risk.
Frontendkodens implementering av inaktiva detekteringstekniker är en annan faktor. Utvecklare kan förutse tider av inaktivitet och varna användare innan sessionen löper ut genom att använda händelseavlyssnare för användaraktivitet. Genom att använda detta kan användare behålla kontrollen över sina sessioner och se till att deras SSO session körs inte kontinuerligt. I en SSO-integrerad miljö kan utvecklare bevara säkerhet och användarkomfort genom att hitta en balans mellan dessa faktorer.
Vanliga frågor om SAML 2.0 SLO och Session Timeouts
- Vad händer på tjänsteleverantörsnivå när en session tar slut?
- Vanligtvis loggas användaren ut från programmet när en session timeout på SP-nivå. Det beror dock på hur systemet är konfigurerat, eftersom SAML 2.0-specifikationen inte kräver att detta orsakar en SLO vid IDP.
- Ska en SLO hos identitetsleverantören triggas av en timeout för en tjänsteleverantörssession?
- Organisationens policy styr detta. Även om SAML 2.0 inte kräver det, väljer många att ställa in SLO vid IDP när SP-sessionen avslutas av säkerhetsskäl.
- När en inaktiv session slutar, hur kan jag få SLO att hända?
- Sessionsutgång kan detekteras via en backend-mekanism, som sedan initierar en create_logout_request_url() förfarande för att göra en SLO-begäran till IDP.
- Hur upptäcks sessionsinaktivitet på frontend?
- Eventlyssnare gillar som onmousemove och onkeypress används vanligtvis för att spåra inaktivitet då de återställer en timer varje gång en användare interagerar med applikationen.
- Efter att ha loggat ut från SP, är det säkert att ha IDP-sessionen öppen?
- En säkerhetsrisk kan uppstå om IDP-sessionen lämnas öppen, särskilt om användaren tror att de har checkat ut helt. Det rekommenderas att ställa in SLO för att replikera SP-sessionens utgång.
Avsluta SAML 2.0 Session Timeout Management
Att upprätthålla säkerheten i ett SSO-system kräver att identitetsleverantören och tjänsteleverantören synkroniserar sina utloggningsprocesser. Även om SAML 2.0 inte kräver hur sessionstimeout ska hanteras, hanterar många företag enstaka utloggningar på ett enhetligt sätt.
Det rekommenderas att skicka en SLO-förfrågan varje gång tjänsteleverantörssessionen avslutas på grund av inaktivitet för att förbättra säkerheten. Detta säkerställer att användaren har loggat ut från identitetsleverantören såväl som applikationen, vilket undviker oönskad åtkomst på många plattformar.
Referenser och källor för bästa praxis för SAML 2.0
- Detaljerad dokumentation om SAML 2.0 och Single Log Out standarder och riktlinjer finns i den officiella OASIS SAML 2.0 Core Specification .
- För insikter i Microsoft Entra och dess integration med SSO och SLO, se den officiella Microsoft-dokumentationen på Azure Active Directory och SAML .
- Node.js SAML-biblioteket som används i exemplen, tillsammans med sessionshanteringstekniker, kan utforskas ytterligare på SAML2-js biblioteksdokumentation .
- För att förstå bästa praxis för att konfigurera enkel inloggning och sessionshantering, besök artikeln om SSO bästa praxis av Auth0.