Doporučené postupy jednotného odhlášení SAML 2.0 po nečinnosti poskytovatele služeb

Doporučené postupy jednotného odhlášení SAML 2.0 po nečinnosti poskytovatele služeb
Doporučené postupy jednotného odhlášení SAML 2.0 po nečinnosti poskytovatele služeb

Vysvětlení SAML 2.0 Jednotné odhlášení po vypršení časového limitu relace

Protože systémy SAML 2.0 Single Sign-On (SSO) umožňují uživatelům přihlašovat se do různých aplikací pomocí jediné sady přihlašovacích údajů, výrazně zjednodušili ověřování uživatelů. Existují však také významné problémy s pojmem jednotného odhlášení (SLO), zejména s ohledem na to, co se stane, když vyprší relace uživatele u poskytovatele služeb (SP), protože se nepřihlásil. V tomto případě by měl poskytovatel identity Konec relace (IDP) také?

Správa relací mezi poskytovatelem služeb a IDP je nezbytná pro zajištění bezpečného a efektivního přístupu v kontextu SAML 2.0. Není vždy zřejmé, kdy relace SP končí, zda má být uživatel stále připojen k IDP, což by mohlo mít dopad na další aplikace, které jsou připojeny ke stejnému IDP. To vyvolává otázky týkající se použitelnosti a bezpečnosti.

Mnoho podniků, zejména těch, které používají rozhraní jako Microsoft Entra, musí zavést jasný osvědčený postup pro zacházení s těmito časovými limity relací. Je lepší, aby se relace poskytovatele zastavila jednoduše na úrovni poskytovatele služeb, nebo by to mělo vést také k SLO, které uživatele odhlásí z jeho účtu IDP?

Na příkladech z reálného světa k ilustraci nejúčinnějších technik pro zpracování časových limitů relací a zaručení bezpečnosti i použitelnosti tento dokument zkoumá standardní postupy a standardy pro zpracování událostí SAML 2.0 SLO v takových situacích.

Příkaz Příklad použití
session() Používá se v aplikaci Express k ovládání uživatelských relací. V příkladu pomáhá při sledování aktivity uživatele a vypršení časového limitu relace, takže lze v případě potřeby spustit logiku odhlášení.
maxAge Určuje časový rámec, po který je soubor cookie relace platný. V tomto případě je časovač nastaven tak, aby vypršel po 600 000 milisekundách nebo 10 minutách a zahájil událost odhlášení.
create_logout_request_url() Když relace poskytovatele služeb skončí, adresa URL požadavku jednotného odhlášení (SLO) vytvořená touto metodou knihovny SAML2 je předána poskytovateli identity (IDP).
readFileSync() Čte soubory klíčů a certifikáty synchronně, což je nezbytné pro nastavení poskytovatele služeb SAML2. Aby poskytovatel služeb a poskytovatel identity mohli bezpečně komunikovat, jsou tyto certifikáty nezbytné.
assert_endpoint Označuje adresu URL, kterou po úspěšném ověření poskytovatel identity použije k přenosu tvrzení SAML. Tímto způsobem je zaručena úroveň ověření uživatele poskytovatele služeb.
window.onload Tato událost se používá k resetování časovače nečinnosti relace v rozhraní frontend. Zajišťuje, že když uživatel načte program poprvé, časovač se spustí znovu.
onmousemove Chcete-li resetovat časovač relace, tento posluchač událostí detekuje jakýkoli pohyb myši. Je to nezbytné pro sledování chování uživatelů a předcházení náhodným časovým limitům relací.
fetch() Používá se k asynchronnímu odeslání požadavku SLO po vypršení časového limitu relace na server. Aby se mohl spojit s poskytovatelem identity a odhlásit uživatele z IDP, spustí logiku backendu.
setTimeout() Tato funkce v kódu frontendu způsobí, že událost časového limitu relace nastane po předem určeném množství nečinnosti. Je to nezbytné pro sledování chování uživatelů a provádění bezpečnostních předpisů.

Optimalizace jediného odhlášení pomocí zpracování časového limitu relace SAML 2.0

Použití Node.js a Express, backendový skript pro zpracování Single Log Out (SLO) se zaměřuje na schopnost sledovat vypršení platnosti uživatelské relace a iniciovat odhlašovací sekvenci na úrovni poskytovatele služeb (SP) a poskytovatele identity (IDP). Řízení expresních relací je jádrem této úvahy. Spouštěcí bod stanovíme nastavením ukončení relace po předem určeném množství nečinnosti – v našem příkladu deset minut. Když relace skončí, skript pomocí metody `create_logout_request_url()} spustí požadavek na odhlášení ze SAML 2.0, který se poté připojí k IDP (v tomto případě Microsoft Entra), chcete-li relaci uživatele úplně ukončit. To zvyšuje bezpečnost tím, že zaručuje, že se uživatel zcela odhlásil ze systému.

Nakládáme certifikáty SAML a klíče do aplikace pomocí příkazu `readFileSync()} pro umožnění zabezpečené komunikace mezi SP (MyApp) a IDP (Microsoft Entra). Ověřením požadavku na odhlášení tyto certifikáty chrání před nelegálním odhlášením a zaručují, že komunikace zůstane šifrovaná a potvrzená. Uživatel je po vygenerování odeslán na adresu URL požadavku na odhlášení, kde IDP zpracuje odhlášení a v případě potřeby ukončí relaci uživatele napříč všemi přidruženými aplikacemi. Zachování bezpečnosti a integrity víceaplikačních instalací Single Sign-On (SSO) vyžaduje tuto obousměrnou komunikaci.

JavaScriptový skript je nezbytný pro sledování uživatelských aktivit v reálném čase na frontendu. Pokaždé, když uživatel interaguje s programem, resetujeme časový limit relace pomocí posluchačů událostí, jako jsou `onmousemove} a `onkeypress`. Časovač, který byl nastaven pomocí `setTimeout()` upozorní uživatele a automaticky ho odhlásí z SP (MyApp), když je uživatel nečinný. Po odhlášení je dříve pokrytý proces odhlášení ze SAML 2.0 zahájen tím, že skript frontendu odešle požadavek SLO do backendu pomocí `fetch()`. Tato technika zajišťuje, že nečinnost na úrovni SP bude řešena rychle, bezpečně a bez problémů.

Při integraci SAML 2.0 a správa relace jsou kombinovány, uživatelská zkušenost je bezproblémová a bezpečnostní standardy jsou dodržovány. Aby se zabránilo tomu, že uživatel zůstane ověřený déle, než je povoleno během nečinnosti, časový limit relace zahájí odhlášení místního SP i odhlášení IDP. Ačkoli SAML 2.0 nevyžaduje žádné zvláštní chování, pokud jde o časové limity relací, je obecně přijímáno jako osvědčený postup použití vypršení platnosti relace k zahájení SLO. Ukončením nečinných relací vytváří rovnováhu mezi zabezpečením a uživatelským zážitkem tím, že umožňuje synchronizované odhlašování napříč různými platformami připojenými k jednotnému přihlašování.

Použití Node.js a Express ke zpracování jednotného odhlášení SAML 2.0 s časovým limitem relace

Backendová metoda pro správu SAML 2.0 SLO s časovými limity relace poskytovatele služeb pomocí Node.js a Express. Toto řešení používá požadavky SAML ke kontrole, zda relace nevypršela, a k zahájení SLO na úrovni poskytovatele identity.

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

Použití rozhraní JavaScript a detekce časového limitu nečinnosti ke zpracování SAML 2.0 SLO

V metodě frontendu je časový limit relace detekován pomocí vanilkového JavaScriptu ke sledování nečinnosti uživatele a zahájení jednotného odhlášení (SLO). Tím sdělíte poskytovateli služeb, aby vydal požadavek SLO poskytovateli identity.

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

Prozkoumání SAML 2.0: Jedno odhlášení a časový limit nečinnosti

Jak adresy SAML 2.0 Single Log Out (SLO). nečinnost na úrovni poskytovatele služeb (SP) je kritickou součástí pro správu. Ačkoli je zřejmé, že ruční odhlášení na SP by mělo způsobit i odhlášení poskytovatele identity (IDP), časové limity relace způsobené nečinností situaci komplikují. Standard SAML 2.0 jasně nestanoví, jak by se mělo zacházet se SLO při vypršení platnosti relace. To však umožňuje přijetí osvědčených postupů, které mohou zlepšit uživatelskou zkušenost a zabezpečení.

Například uživatelé, kteří se přihlásí do aplikace, jako je MyApp prostřednictvím Microsoft Entra (IDP), zůstávají často přihlášeni k IDP i poté, co byli odpojeni z SP kvůli nečinnosti. Pokud se uživatel domnívá, že je plně odhlášen, zatímco ostatní aplikace využívající stejné jednotné přihlašování stále běží, může se to zvýšit bezpečnostní obavy. Nastavení správy relací SAML tak, aby napodobovala událost časového limitu SP na úrovni IDP a zaručila synchronizovaná odhlášení, je jedním ze způsobů, jak toto riziko snížit.

Dalším faktorem je implementace technik detekce nečinnosti v kódu frontendu. Vývojáři mohou předvídat dobu nečinnosti a upozornit uživatele před vypršením relace pomocí posluchačů událostí pro aktivitu uživatelů. Pomocí tohoto mohou uživatelé mít kontrolu nad svými relacemi a ujistit se, že jejich SSO relace neběží nepřetržitě. V prostředí integrovaném SSO mohou vývojáři zachovat zabezpečení a uživatelský komfort tím, že najdou rovnováhu mezi těmito faktory.

Běžné otázky týkající se SAML 2.0 SLO a časových limitů relace

  1. Co se stane na úrovni poskytovatele služeb, když vyprší časový limit relace?
  2. Obvykle je uživatel odhlášen z programu, když vyprší časový limit relace na úrovni SP. Záleží však na tom, jak je systém nastaven, protože specifikace SAML 2.0 nevyžaduje, aby to způsobilo SLO u IDP.
  3. Měl by být SLO u poskytovatele identity spuštěn časovým limitem relace poskytovatele služeb?
  4. To řídí politika organizace. Ačkoli to SAML 2.0 nenařizuje, mnozí se rozhodnou spustit SLO u IDP, když relace SP z bezpečnostních důvodů skončí.
  5. Když neaktivní relace skončí, jak mohu provést SLO?
  6. Vypršení relace lze detekovat pomocí backendového mechanismu, který pak iniciuje a create_logout_request_url() postup pro podání žádosti o SLO u IDP.
  7. Jak se na frontendu zjišťuje nečinnost relace?
  8. Posluchači událostí mají rádi as onmousemove a onkeypress se běžně používají ke sledování nečinnosti, protože resetují časovač pokaždé, když uživatel interaguje s aplikací.
  9. Je po odhlášení z SP bezpečné mít otevřenou relaci IDP?
  10. Ponecháním otevřené relace IDP může vzniknout bezpečnostní riziko, zejména pokud se uživatel domnívá, že se zcela odhlásil. Doporučuje se nastavit SLO pro replikaci vypršení relace SP.

Dokončení správy časového limitu relace SAML 2.0

Udržování zabezpečení v systému jednotného přihlášení vyžaduje zajistit, aby poskytovatel identity a poskytovatel služeb synchronizovali své procesy odhlášení. Přestože SAML 2.0 nenařizuje, jak by se mělo zacházet s časovými limity relací, mnoho podniků zpracovává jednotlivá odhlášení jednotným způsobem.

Za účelem zlepšení zabezpečení se doporučuje odeslat požadavek SLO pokaždé, když relace poskytovatele služeb skončí z důvodu nečinnosti. Tím je zajištěno, že se uživatel odhlásil od poskytovatele identity i z aplikace, čímž se zabrání nechtěnému přístupu na mnoha platformách.

Reference a zdroje pro SAML 2.0 Best Practices
  1. Podrobnou dokumentaci standardů a pokynů pro SAML 2.0 a Single Log Out lze nalézt v oficiálních stránkách Základní specifikace OASIS SAML 2.0 .
  2. Informace o aplikaci Microsoft Entra a její integraci s SSO a SLO naleznete v oficiální dokumentaci společnosti Microsoft na Azure Active Directory a SAML .
  3. Knihovnu Node.js SAML použitou v příkladech spolu s technikami správy relací lze dále prozkoumat na webu Dokumentace knihovny SAML2-js .
  4. Chcete-li porozumět osvědčeným postupům při konfiguraci jednotného přihlášení a správy relací, navštivte článek o Nejlepší postupy jednotného přihlášení autorem Auth0.