Best Practices für die einmalige Abmeldung von SAML 2.0 nach Inaktivität des Dienstanbieters

Best Practices für die einmalige Abmeldung von SAML 2.0 nach Inaktivität des Dienstanbieters
Best Practices für die einmalige Abmeldung von SAML 2.0 nach Inaktivität des Dienstanbieters

Grundlegendes zum einmaligen Abmelden von SAML 2.0 nach Sitzungs-Timeout

Da SAML 2.0 Single Sign-On (SSO)-Systeme es Benutzern ermöglichen, sich mit einem einzigen Satz von Anmeldeinformationen bei verschiedenen Anwendungen anzumelden, haben sie die Benutzerauthentifizierung erheblich vereinfacht. Es gibt jedoch auch erhebliche Probleme mit dem Konzept des Single Log Out (SLO), insbesondere im Hinblick darauf, was passiert, wenn die Sitzung eines Benutzers bei einem Service Provider (SP) abläuft, weil er sich nicht angemeldet hat. In diesem Fall sollte dies beim Identitätsanbieter der Fall sein (IDP-)Sitzungsende auch?

Das Sitzungsmanagement zwischen SP und IDP ist für die Gewährleistung eines sicheren und effizienten Zugriffs im Kontext von SAML 2.0 von entscheidender Bedeutung. Wenn eine SP-Sitzung endet, ist es nicht immer offensichtlich, ob der Benutzer weiterhin mit dem IDP verbunden sein sollte, was Auswirkungen auf andere Apps haben könnte, die mit demselben IDP verknüpft sind. Dies wirft Fragen zur Benutzerfreundlichkeit und Sicherheit auf.

Viele Unternehmen müssen eine klare Best Practice für den Umgang mit diesen Sitzungszeitüberschreitungen etablieren, insbesondere diejenigen, die Schnittstellen wie Microsoft Entra verwenden. Ist es besser, die Sitzung eines SP einfach auf SP-Ebene zu beenden, oder sollte dies auch zu einem SLO führen, das den Benutzer von seinem IDP-Konto abmeldet?

Anhand realer Beispiele zur Veranschaulichung der effizientesten Techniken zum Umgang mit Sitzungs-Timeouts und zur Gewährleistung von Sicherheit und Benutzerfreundlichkeit untersucht dieses Dokument Standardpraktiken und Standards für den Umgang mit SAML 2.0-SLO-Ereignissen in solchen Situationen.

Befehl Anwendungsbeispiel
session() Wird in der Express-Anwendung zur Steuerung von Benutzersitzungen verwendet. Im Beispiel hilft es bei der Überwachung von Benutzeraktivitäten und Sitzungszeitüberschreitungen, sodass die Abmeldelogik bei Bedarf ausgelöst werden kann.
maxAge Gibt den Zeitraum an, in dem das Sitzungscookie gültig ist. In diesem Fall ist der Timer so eingestellt, dass er nach 600.000 Millisekunden oder 10 Minuten abläuft und ein Abmeldeereignis auslöst.
create_logout_request_url() Wenn die Dienstanbietersitzung beendet wird, wird die von dieser SAML2-Bibliotheksmethode erstellte Single Log Out (SLO)-Anforderungs-URL an den Identitätsanbieter (IDP) weitergeleitet.
readFileSync() Liest die Schlüsseldateien und Zertifikate synchron, was für die Einrichtung des SAML2-Dienstanbieters erforderlich ist. Damit der Dienstanbieter und der Identitätsanbieter sicher kommunizieren können, sind diese Zertifizierungen erforderlich.
assert_endpoint Gibt die URL an, die der Identitätsanbieter nach erfolgreicher Authentifizierung zur Übertragung der SAML-Behauptung verwendet. Dadurch wird die Benutzerauthentifizierung auf der Ebene des Dienstanbieters gewährleistet.
window.onload Dieses Ereignis wird verwendet, um den Sitzungsinaktivitätstimer im Frontend zurückzusetzen. Es stellt sicher, dass der Timer von vorne beginnt, wenn der Benutzer das Programm zum ersten Mal lädt.
onmousemove Um den Sitzungstimer zurückzusetzen, erkennt dieser Ereignis-Listener jede Mausbewegung. Dies ist wichtig, um das Benutzerverhalten im Auge zu behalten und versehentliche Sitzungs-Timeouts zu vermeiden.
fetch() Wird verwendet, um nach Ablauf des Sitzungszeitlimits asynchron eine SLO-Anfrage an den Server zu senden. Um eine Verbindung zum Identitätsanbieter herzustellen und den Benutzer vom IDP abzumelden, wird die Backend-Logik aktiviert.
setTimeout() Diese Funktion im Frontend-Code bewirkt, dass das Sitzungs-Timeout-Ereignis nach der vorgegebenen Inaktivitätsdauer auftritt. Dies ist unerlässlich, um das Nutzerverhalten im Auge zu behalten und Sicherheitsvorschriften umzusetzen.

Optimieren Sie die einmalige Abmeldung mit der SAML 2.0-Behandlung von Sitzungszeitüberschreitungen

Benutzen Node.js und Express, das Backend-Skript für die Handhabung von Single Log Out (SLO), konzentriert sich auf die Fähigkeit, den Ablauf von Benutzersitzungen zu verfolgen und eine Abmeldesequenz auf den Ebenen Service Provider (SP) und Identity Provider (IDP) zu initiieren. Im Mittelpunkt dieser Überlegung steht die Verwaltung von Express-Sitzungen. Wir legen einen Triggerpunkt fest, indem wir die Sitzung so einstellen, dass sie nach einer vorgegebenen Zeit der Inaktivität beendet wird – in unserem Beispiel zehn Minuten. Wenn die Sitzung endet, verwendet das Skript die Methode „create_logout_request_url()}, um eine SAML 2.0-Abmeldeanforderung zu starten, die dann eine Verbindung zum IDP herstellt (in diesem Fall Microsoft Entra), um die Benutzersitzung vollständig zu beenden. Dies erhöht die Sicherheit, indem gewährleistet wird, dass sich der Benutzer vollständig vom System abgemeldet hat.

Wir laden SAML-Zertifikate und Schlüssel in die Anwendung mit dem Befehl „readFileSync()} ein, um eine sichere Kommunikation zwischen dem SP (MyApp) und dem IDP (Microsoft Entra) zu ermöglichen. Durch die Authentifizierung der Abmeldeanforderung schützen diese Zertifikate vor illegalen Abmeldungen und garantieren, dass die Kommunikation verschlüsselt und bestätigt bleibt. Der Benutzer wird nach der Generierung an die Abmeldeanforderungs-URL weitergeleitet, wo der IDP die Abmeldung übernimmt und bei Bedarf die Sitzung des Benutzers über alle zugehörigen Anwendungen hinweg beendet. Um die Sicherheit und Integrität von Single-Sign-On-Installationen (SSO) mit mehreren Anwendungen aufrechtzuerhalten, ist diese bidirektionale Kommunikation erforderlich.

Das JavaScript-Skript ist unerlässlich, um Benutzeraktivitäten im Frontend in Echtzeit zu verfolgen. Jedes Mal, wenn der Benutzer mit dem Programm interagiert, setzen wir das Sitzungszeitlimit zurück, indem wir Ereignis-Listener wie „onmousemove} und „onkeypress“ verwenden. Ein mit „setTimeout()“ eingestellter Timer warnt den Benutzer und meldet ihn automatisch vom SP (MyApp) ab, wenn der Benutzer inaktiv wird. Nach der Abmeldung wird der zuvor beschriebene SAML 2.0-Abmeldevorgang gestartet, indem das Frontend-Skript mithilfe von „fetch()“ eine SLO-Anfrage an das Backend sendet. Diese Technik stellt sicher, dass Inaktivität auf SP-Ebene umgehend, sicher und fehlerfrei behoben wird.

Bei der SAML 2.0-Integration und Sitzungsverwaltung werden kombiniert, das Benutzererlebnis ist nahtlos und Sicherheitsstandards werden eingehalten. Um zu verhindern, dass der Benutzer bei Inaktivität länger als zulässig authentifiziert bleibt, initiiert das Sitzungs-Timeout sowohl die lokale SP-Abmeldung als auch die IDP-Abmeldung. Obwohl SAML 2.0 kein besonderes Verhalten in Bezug auf Sitzungszeitüberschreitungen erfordert, wird es allgemein als bewährte Methode akzeptiert, den Sitzungsablauf zum Initiieren von SLO zu verwenden. Durch die Beendigung inaktiver Sitzungen wird ein Gleichgewicht zwischen Sicherheit und Benutzererfahrung hergestellt, indem synchronisierte Abmeldungen über verschiedene mit SSO verbundene Plattformen hinweg ermöglicht werden.

Verwenden von Node.js und Express zur Handhabung von SAML 2.0-Einzelabmeldungen mit Sitzungs-Timeout

Backend-Methode zur Verwaltung von SAML 2.0 SLO mit Sitzungszeitüberschreitungen von Dienstanbietern unter Verwendung von Node.js und Express. Diese Lösung verwendet SAML-Anfragen, um zu prüfen, ob die Sitzung abgelaufen ist, und um SLO auf der Ebene des Identitätsanbieters zu initiieren.

// 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");
});

Verwendung des JavaScript-Frontends und der Leerlauf-Timeout-Erkennung zur Handhabung von SAML 2.0 SLO

Bei einer Frontend-Methode wird eine Sitzungszeitüberschreitung erkannt, indem Vanilla-JavaScript verwendet wird, um die Inaktivität des Benutzers zu überwachen und Single Log Out (SLO) zu initiieren. Dadurch wird der Dienstanbieter angewiesen, eine SLO-Anfrage an den Identitätsanbieter zu senden.

// 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));
}

Erkundung von SAML 2.0: Einzelabmeldung und Zeitüberschreitung bei Inaktivität

Wie SAML 2.0 Single Log Out (SLO) adressiert Inaktivität auf der Ebene des Service Providers (SP) ist eine wichtige zu verwaltende Komponente. Obwohl es offensichtlich ist, dass eine manuelle Abmeldung beim SP auch eine Abmeldung beim Identitätsanbieter (IDP) zur Folge haben sollte, erschweren Sitzungszeitüberschreitungen aufgrund von Inaktivität die Sache. Der SAML 2.0-Standard gibt nicht klar an, wie SLO bei Sitzungsablauf gehandhabt werden soll. Dies ermöglicht jedoch die Einführung von Best Practices, die das Benutzererlebnis und die Sicherheit verbessern können.

Beispielsweise bleiben Benutzer, die sich über Microsoft Entra (IDP) bei einer Anwendung wie MyApp anmelden, häufig beim IDP angemeldet, selbst nachdem sie aufgrund von Inaktivität vom SP ausgeschlossen wurden. Wenn der Benutzer glaubt, dass er vollständig abgemeldet ist, während andere Apps, die dasselbe SSO verwenden, noch ausgeführt werden, kann dies zu einem Problem führen Sicherheitsbedenken. Eine Möglichkeit, dieses Risiko zu verringern, besteht darin, die SAML-Sitzungsverwaltung so einzurichten, dass sie das SP-Timeout-Ereignis auf IDP-Ebene nachahmt und synchronisierte Abmeldungen gewährleistet.

Ein weiterer Faktor ist die Implementierung von Leerlauferkennungstechniken im Frontend-Code. Entwickler können Zeiten der Inaktivität vorhersehen und Benutzer benachrichtigen, bevor die Sitzung abläuft, indem sie Ereignis-Listener für Benutzeraktivitäten verwenden. Auf diese Weise können Benutzer die Kontrolle über ihre Sitzungen behalten und sicherstellen, dass ihre SSO-Sitzung läuft nicht kontinuierlich. In einer SSO-integrierten Umgebung können Entwickler Sicherheit und Benutzerkomfort gewährleisten, indem sie ein Gleichgewicht zwischen diesen Faktoren finden.

Häufige Fragen zu SAML 2.0 SLO und Sitzungszeitüberschreitungen

  1. Was passiert auf Dienstanbieterebene, wenn eine Sitzung abläuft?
  2. Normalerweise wird der Benutzer vom Programm abgemeldet, wenn eine Sitzung auf SP-Ebene abläuft. Dies hängt jedoch davon ab, wie das System eingerichtet ist, da die SAML 2.0-Spezifikation nicht erfordert, dass dies zu einem SLO beim IDP führt.
  3. Sollte ein SLO beim Identitätsanbieter durch eine Zeitüberschreitung der Dienstanbieter-Sitzung ausgelöst werden?
  4. Die Richtlinien der Organisation regeln dies. Obwohl SAML 2.0 dies nicht vorschreibt, entscheiden sich viele aus Sicherheitsgründen dafür, SLO beim IDP auszulösen, wenn die SP-Sitzung endet.
  5. Wie kann ich SLO ermöglichen, wenn eine inaktive Sitzung endet?
  6. Der Sitzungsablauf kann über einen Backend-Mechanismus erkannt werden, der dann einen initiiert create_logout_request_url() Verfahren zum Stellen einer SLO-Anfrage an den IDP.
  7. Wie wird Sitzungsinaktivität im Frontend erkannt?
  8. Event-Listener mögen als onmousemove Und onkeypress werden häufig zum Verfolgen von Inaktivität verwendet, da sie jedes Mal, wenn ein Benutzer mit der Anwendung interagiert, einen Timer zurücksetzen.
  9. Ist es nach der Abmeldung vom SP sicher, die IDP-Sitzung geöffnet zu lassen?
  10. Das Offenlassen der IDP-Sitzung kann ein Sicherheitsrisiko darstellen, insbesondere wenn der Benutzer glaubt, vollständig ausgecheckt zu haben. Es wird empfohlen, SLO einzurichten, um den Ablauf der SP-Sitzung zu replizieren.

Zusammenfassung der SAML 2.0-Sitzungs-Timeout-Verwaltung

Um die Sicherheit in einem SSO-System aufrechtzuerhalten, muss sichergestellt werden, dass der Identitätsanbieter und der Dienstanbieter ihre Abmeldeprozesse synchronisieren. Auch wenn SAML 2.0 nicht vorschreibt, wie mit Sitzungszeitüberschreitungen umzugehen ist, handhaben viele Unternehmen Einzelabmeldungen einheitlich.

Um die Sicherheit zu verbessern, wird empfohlen, jedes Mal eine SLO-Anfrage zu senden, wenn die Dienstanbietersitzung aufgrund von Inaktivität endet. Dadurch wird sichergestellt, dass sich der Benutzer sowohl vom Identitätsanbieter als auch von der Anwendung abgemeldet hat, wodurch unerwünschte Zugriffe auf vielen Plattformen vermieden werden.

Referenzen und Quellen für SAML 2.0 Best Practices
  1. Eine ausführliche Dokumentation zu den Standards und Richtlinien zu SAML 2.0 und Single Log Out finden Sie im offiziellen OASIS SAML 2.0 Kernspezifikation .
  2. Einblicke in Microsoft Entra und seine Integration mit SSO und SLO finden Sie in der offiziellen Microsoft-Dokumentation unter Azure Active Directory und SAML .
  3. Die in den Beispielen verwendete SAML-Bibliothek von Node.js sowie Sitzungsverwaltungstechniken können hier näher untersucht werden Dokumentation der SAML2-js-Bibliothek .
  4. Um die Best Practices bei der Konfiguration von Single Sign-On und Sitzungsverwaltung zu verstehen, lesen Sie den Artikel über Best Practices für SSO von Auth0.