Inzicht in SAML 2.0 Enkelvoudig uitloggen na een sessietime-out
Omdat SAML 2.0 Single Sign-On (SSO)-systemen gebruikers in staat stellen zich bij verschillende applicaties aan te melden met één enkele set inloggegevens, hebben ze de gebruikersauthenticatie aanzienlijk vereenvoudigd. Maar er zijn ook aanzienlijke problemen met het idee van Single Log Out (SLO), vooral met betrekking tot wat er gebeurt als de sessie van een gebruiker bij een serviceprovider (SP) verloopt omdat deze niet heeft ingelogd. In dit geval moet de identiteitsprovider (IDP) sessie ook afgelopen?
Sessiebeheer tussen de SP en IDP is essentieel om veilige en efficiënte toegang te garanderen in de context van SAML 2.0. Het is niet altijd duidelijk wanneer een SP-sessie eindigt als de gebruiker nog steeds verbonden moet zijn met de IDP, wat gevolgen kan hebben voor andere apps die aan dezelfde IDP zijn gekoppeld. Dit roept vragen op over zowel de bruikbaarheid als de veiligheid.
Veel bedrijven moeten een duidelijke best practice opstellen voor het omgaan met deze sessietime-outs, vooral bedrijven die interfaces zoals Microsoft Entra gebruiken. Is het beter dat de sessie van een SP eenvoudigweg op SP-niveau stopt, of moet dit ook resulteren in een SLO die de gebruiker uitlogt bij zijn IDP-account?
Aan de hand van voorbeelden uit de praktijk om de meest efficiënte technieken te illustreren voor het omgaan met sessietime-outs en het garanderen van zowel veiligheid als bruikbaarheid, onderzoekt dit artikel standaardpraktijken en standaarden voor het omgaan met SAML 2.0 SLO-gebeurtenissen in dergelijke situaties.
Commando | Voorbeeld van gebruik |
---|---|
session() | Wordt gebruikt in de Express-applicatie om gebruikerssessies te beheren. In het voorbeeld helpt het bij het monitoren van gebruikersactiviteit en sessietime-outs, zodat uitloglogica kan worden geactiveerd wanneer dat nodig is. |
maxAge | Specificeert het tijdsbestek waarin de sessiecookie geldig is. In dit geval is de timer zo ingesteld dat deze na 600.000 milliseconden, oftewel 10 minuten, afloopt en een uitloggebeurtenis start. |
create_logout_request_url() | Wanneer de serviceprovidersessie wordt beëindigd, wordt de SLO-verzoek-URL (Single Log Out) die door deze SAML2-bibliotheekmethode is gemaakt, doorgestuurd naar de identiteitsprovider (IDP). |
readFileSync() | Leest de sleutelbestanden en certificaten synchroon, wat nodig is voor het instellen van de SAML2 Service Provider. Om de Service Provider en Identity Provider veilig te laten communiceren, zijn deze certificeringen noodzakelijk. |
assert_endpoint | Geeft de URL aan die, na succesvolle authenticatie, de identiteitsprovider zal gebruiken om de SAML-bewering te verzenden. Door dit te doen, wordt het gebruikersauthenticatieniveau van de Service Provider gegarandeerd. |
window.onload | Deze gebeurtenis wordt gebruikt om de sessie-inactiviteitstimer in de frontend opnieuw in te stellen. Het zorgt ervoor dat wanneer de gebruiker het programma voor de eerste keer laadt, de timer opnieuw begint. |
onmousemove | Om de sessietimer opnieuw in te stellen, detecteert deze gebeurtenislistener elke muisbeweging. Het is essentieel om het gebruikersgedrag in de gaten te houden en onbedoelde sessietime-outs te voorkomen. |
fetch() | Wordt gebruikt om asynchroon een SLO-verzoek te verzenden, na de sessietime-out, naar de server. Om verbinding te maken met de identiteitsprovider en de gebruiker uit te loggen bij de IDP, wordt de backend-logica in werking gesteld. |
setTimeout() | Deze functie in de frontendcode zorgt ervoor dat de sessietime-outgebeurtenis plaatsvindt na de vooraf bepaalde hoeveelheid inactiviteit. Het is essentieel om het gebruikersgedrag in de gaten te houden en veiligheidsvoorschriften te implementeren. |
Eénmalig uitloggen optimaliseren met SAML 2.0 Session Timeout-afhandeling
Gebruiken Knooppunt.js en Express, het backend-script voor het afhandelen van Single Log Out (SLO), richt zich op de mogelijkheid om het verlopen van gebruikerssessies te volgen en een uitlogprocedure te initiëren op het niveau van de serviceprovider (SP) en de identiteitsprovider (IDP). Het beheer van Express-sessies vormt de kern van deze redenering. We stellen een triggerpoint vast door de sessie zo in te stellen dat deze wordt beëindigd na een vooraf bepaalde hoeveelheid inactiviteit (in ons voorbeeld tien minuten). Wanneer de sessie eindigt, gebruikt het script de methode `create_logout_request_url()} om een SAML 2.0-uitlogverzoek te starten, dat vervolgens verbinding maakt met de IDP (in dit geval Microsoft Entra) om de gebruikerssessie volledig te beëindigen. Dit verhoogt de veiligheid door te garanderen dat de gebruiker volledig is afgemeld bij het systeem.
Wij laden SAML-certificaten en toetst de applicatie in met behulp van de opdracht `readFileSync()} om veilige communicatie tussen de SP (MyApp) en de IDP (Microsoft Entra) mogelijk te maken. Door het uitlogverzoek te authenticeren beschermen deze certificaten tegen illegaal uitloggen en garanderen ze dat de communicatie gecodeerd en bevestigd blijft. De gebruiker wordt, nadat deze is gegenereerd, naar de uitlogverzoek-URL gestuurd, waar de IDP het uitloggen afhandelt en, indien nodig, de sessie van de gebruiker beëindigt in alle bijbehorende applicaties. Voor het behoud van de veiligheid en integriteit van Single Sign-On (SSO)-installaties met meerdere applicaties is deze tweerichtingscommunicatie vereist.
Het JavaScript-script is essentieel voor het in realtime volgen van gebruikersactiviteiten aan de front-end. Elke keer dat de gebruiker met het programma communiceert, resetten we de sessietime-out door gebeurtenislisteners te gebruiken, zoals `onmousemove} en `onkeypress`. Een timer die is ingesteld met `setTimeout()` waarschuwt de gebruiker en logt hem automatisch uit bij de SP (MyApp) wanneer de gebruiker inactief wordt. Na het uitloggen wordt het eerder besproken SAML 2.0-uitlogproces gestart doordat het frontend-script een SLO-verzoek naar de backend verzendt met behulp van `fetch()`. Deze techniek zorgt ervoor dat inactiviteit op SP-niveau snel, veilig en zonder problemen wordt aangepakt.
Wanneer SAML 2.0-integratie en sessiebeheer worden gecombineerd, de gebruikerservaring is naadloos en de beveiligingsnormen worden gehandhaafd. Om te voorkomen dat de gebruiker langer geauthenticeerd blijft dan is toegestaan tijdens inactiviteit, initieert de sessietime-out zowel de lokale SP-uitloggen als de IDP-uitloggen. Hoewel SAML 2.0 geen specifiek gedrag vereist met betrekking tot sessietime-outs, wordt het algemeen aanvaard als best practice om het verlopen van sessies te gebruiken om SLO te initiëren. Door inactieve sessies te beëindigen, wordt een balans gevonden tussen beveiliging en gebruikerservaring door gesynchroniseerde afmeldingen mogelijk te maken op verschillende met SSO verbonden platforms.
Node.js en Express gebruiken om SAML 2.0 Single Log Out met sessietime-out af te handelen
Backend-methode voor het beheren van SAML 2.0 SLO met sessietime-outs van serviceproviders met behulp van Node.js en Express. Deze oplossing gebruikt SAML-verzoeken om te controleren of de sessie is verlopen en initieert SLO op het niveau van de identiteitsprovider.
// 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 en Idle Timeout-detectie gebruiken om SAML 2.0 SLO af te handelen
Bij een frontend-methode wordt een sessietime-out gedetecteerd door standaard JavaScript te gebruiken om de inactiviteit van gebruikers te monitoren en Single Log Out (SLO) te initiëren. Dit vertelt de serviceprovider dat hij een SLO-verzoek moet indienen bij de identiteitsprovider.
// 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 verkennen: eenmalige uitloggen en time-out voor inactiviteit
Hoe SAML 2.0 Single Log Out (SLO) aanpakt inactiviteit op het niveau van de serviceprovider (SP) is een cruciaal onderdeel om te beheren. Hoewel het duidelijk is dat handmatig uitloggen bij de SP ook een uitloggen van een Identity Provider (IDP) zou moeten veroorzaken, maken sessietime-outs als gevolg van inactiviteit de zaken ingewikkelder. De SAML 2.0-standaard geeft niet duidelijk aan hoe SLO moet worden afgehandeld bij het verlopen van sessies. Dit maakt echter wel de adoptie van best practices mogelijk die de gebruikerservaring en veiligheid kunnen verbeteren.
Zelfs nadat ze vanwege inactiviteit zijn uitgesloten van de SP, blijven gebruikers die zich aanmelden bij een applicatie zoals MyApp via Microsoft Entra (IDP) vaak ingelogd bij de IDP. Als de gebruiker denkt dat hij of zij volledig is uitgelogd terwijl andere apps die dezelfde SSO gebruiken nog steeds actief zijn, kan dit toenemen veiligheidsproblemen. Het opzetten van SAML-sessiebeheer om de SP-time-outgebeurtenis op IDP-niveau na te bootsen en gesynchroniseerde afmeldingen te garanderen, is één manier om dit risico te verminderen.
De implementatie van inactieve detectietechnieken in de frontendcode is een andere factor. Ontwikkelaars kunnen anticiperen op tijden van inactiviteit en gebruikers waarschuwen voordat de sessie verloopt door gebeurtenislisteners te gebruiken voor gebruikersactiviteit. Door dit te gebruiken kunnen gebruikers de controle over hun sessies behouden en ervoor zorgen dat hun sessies optimaal verlopen SSO-sessie loopt niet continu. In een SSO-geïntegreerde omgeving kunnen ontwikkelaars de veiligheid en het gebruikerscomfort behouden door een evenwicht tussen deze factoren te vinden.
Veelgestelde vragen over SAML 2.0 SLO en sessietime-outs
- Wat gebeurt er op het niveau van de serviceprovider als er een sessietime-out optreedt?
- Normaal gesproken wordt de gebruiker uitgelogd bij het programma wanneer er een sessietime-out optreedt op SP-niveau. Het hangt echter af van hoe het systeem is ingesteld, aangezien de SAML 2.0-specificatie niet vereist dat dit een SLO veroorzaakt bij de IDP.
- Moet een SLO bij de identiteitsprovider worden geactiveerd door een sessietime-out van de serviceprovider?
- Het beleid van de organisatie is hierop bepalend. Hoewel SAML 2.0 dit niet verplicht stelt, kiezen velen er om veiligheidsredenen voor om SLO in te stellen bij de IDP wanneer de SP-sessie eindigt.
- Hoe kan ik ervoor zorgen dat SLO wordt uitgevoerd als een inactieve sessie eindigt?
- Het verlopen van een sessie kan worden gedetecteerd via een backend-mechanisme, dat vervolgens een create_logout_request_url() procedure om een SLO-verzoek in te dienen bij de IDP.
- Hoe wordt sessie-inactiviteit gedetecteerd op de frontend?
- Gebeurtenisluisteraars houden van as onmousemove En onkeypress worden vaak gebruikt om inactiviteit bij te houden, omdat ze een timer opnieuw instellen telkens wanneer een gebruiker met de applicatie communiceert.
- Is het veilig om de IDP-sessie te openen nadat u bent uitgelogd bij de SP?
- Er kan een veiligheidsrisico ontstaan als de IDP-sessie open blijft, vooral als de gebruiker denkt dat hij of zij volledig is uitgecheckt. Het wordt aanbevolen om SLO in te stellen om het verlopen van de SP-sessie te repliceren.
Afronding van SAML 2.0 Sessietime-outbeheer
Om de veiligheid in een SSO-systeem te behouden, moet u ervoor zorgen dat de identiteitsprovider en de serviceprovider hun uitlogprocessen synchroniseren. Hoewel SAML 2.0 niet voorschrijft hoe sessietime-outs moeten worden afgehandeld, verwerken veel bedrijven afzonderlijke afmeldingen op een uniforme manier.
Om de veiligheid te verbeteren wordt geadviseerd om elke keer dat de sessie van de serviceprovider eindigt vanwege inactiviteit een SLO-verzoek te sturen. Dit zorgt ervoor dat de gebruiker zowel bij de Identity Provider als bij de applicatie is uitgelogd, waardoor ongewenste toegang op veel platforms wordt vermeden.
Referenties en bronnen voor SAML 2.0 Best Practices
- Gedetailleerde documentatie over SAML 2.0 en Single Log Out-standaarden en -richtlijnen is te vinden in de officiële versie OASIS SAML 2.0 kernspecificatie .
- Voor inzicht in Microsoft Entra en de integratie ervan met SSO en SLO raadpleegt u de officiële Microsoft-documentatie op Azure Active Directory en SAML .
- De Node.js SAML-bibliotheek die in de voorbeelden wordt gebruikt, samen met sessiebeheertechnieken, kan verder worden onderzocht op de SAML2-js bibliotheekdocumentatie .
- Voor meer informatie over best practices bij het configureren van Single Sign-On en sessiebeheer, gaat u naar het artikel op Beste praktijken voor eenmalige aanmelding door Auth0.