SAML 2.0 Best practice per la disconnessione singola in seguito all'inattività del fornitore di servizi

SAML

Comprensione di SAML 2.0 Disconnessione singola dopo il timeout della sessione

Poiché i sistemi SAML 2.0 Single Sign-On (SSO) consentono agli utenti di accedere a varie applicazioni utilizzando un unico set di credenziali, hanno notevolmente semplificato l'autenticazione dell'utente. Ma ci sono anche problemi significativi con il concetto di Single Log Out (SLO), soprattutto per quanto riguarda ciò che accade quando la sessione di un utente scade presso un Service Provider (SP) poiché non ha effettuato l'accesso. In questo caso, il provider di identità dovrebbe (IDP) terminata anche la sessione?

La gestione delle sessioni tra SP e IDP è essenziale per garantire un accesso sicuro ed efficiente nel contesto di SAML 2.0. Non è sempre ovvio quando termina una sessione SP se l'utente deve essere ancora connesso all'IDP, il che potrebbe avere un impatto su altre app collegate allo stesso IDP. Ciò solleva interrogativi sull’usabilità e sulla sicurezza.

Molte aziende, in particolare quelle che utilizzano interfacce come Microsoft Entra, devono stabilire una procedura consigliata chiara per la gestione di questi timeout delle sessioni. È meglio che la sessione di un SP si interrompa semplicemente a livello di SP o dovrebbe comportare anche uno SLO che disconnette l'utente dal proprio account IDP?

Utilizzando esempi reali per illustrare le tecniche più efficienti per gestire i timeout delle sessioni e garantire sicurezza e usabilità, questo documento esamina le pratiche e gli standard standard per la gestione degli eventi SLO SAML 2.0 in tali situazioni.

Comando Esempio di utilizzo
session() Utilizzato nell'applicazione Express per controllare le sessioni utente. Nell'esempio, aiuta a monitorare l'attività dell'utente e i timeout delle sessioni in modo che la logica di disconnessione possa essere attivata quando necessario.
maxAge Specifica l'intervallo di tempo in cui il cookie di sessione è valido. In questo caso, il timer è impostato per scadere dopo 600.000 millisecondi o 10 minuti e avviare un evento di disconnessione.
create_logout_request_url() Quando la sessione del fornitore di servizi termina, l'URL di richiesta Single Log Out (SLO) creato da questo metodo di libreria SAML2 viene inoltrato al provider di identità (IDP).
readFileSync() Legge i file chiave e i certificati in modo sincrono, necessario per configurare il fornitore di servizi SAML2. Affinché il fornitore di servizi e il fornitore di identità possano comunicare in modo sicuro, queste certificazioni sono necessarie.
assert_endpoint Indica l'URL che, a seguito dell'autenticazione, l'Identity Provider utilizzerà per trasmettere l'asserzione SAML. In questo modo viene garantito il livello di autenticazione utente del fornitore di servizi.
window.onload Questo evento viene utilizzato per reimpostare il timer di inattività della sessione nel frontend. Fa in modo che quando l'utente carica il programma per la prima volta, il timer ricominci da capo.
onmousemove Per reimpostare il timer della sessione, questo ascoltatore di eventi rileva qualsiasi movimento del mouse. È essenziale per tenere d'occhio il comportamento dell'utente ed evitare timeout accidentali della sessione.
fetch() Utilizzato per inviare in modo asincrono una richiesta SLO, dopo il timeout della sessione, al server. Per connettersi con il provider di identità e disconnettere l'utente dall'IDP, attiva la logica di backend.
setTimeout() Questa funzione nel codice frontend fa sì che si verifichi l'evento di timeout della sessione dopo un periodo di inattività predeterminato. È essenziale per tenere d'occhio il comportamento degli utenti e implementare le norme di sicurezza.

Ottimizzazione della disconnessione singola con la gestione del timeout della sessione SAML 2.0

Utilizzando ed Express, lo script backend per la gestione del Single Log Out (SLO) si concentra sulla capacità di tenere traccia della scadenza della sessione utente e avviare una sequenza di logout a livello di Service Provider (SP) e Identity Provider (IDP). La gestione delle sessioni Express è al centro di questo ragionamento. Stabiliamo un punto di attivazione impostando la sessione in modo che termini dopo un periodo di inattività predeterminato, dieci minuti, nel nostro esempio. Al termine della sessione, lo script utilizza il metodo `create_logout_request_url()} per avviare una richiesta di logout SAML 2.0, che quindi si connette all'IDP (in questo caso, ) per terminare completamente la sessione utente. Ciò migliora la sicurezza garantendo che l'utente sia completamente disconnesso dal sistema.

Carichiamo e si inserisce nell'applicazione utilizzando il comando `readFileSync()} per abilitare la comunicazione sicura tra SP (MyApp) e IDP (Microsoft Entra). Autenticando la richiesta di disconnessione, questi certificati proteggono da disconnessioni illegali e garantiscono che la comunicazione rimanga crittografata e confermata. L'utente viene inviato all'URL della richiesta di disconnessione dopo che è stato generato, dove l'IDP gestisce la disconnessione e, se necessario, termina la sessione dell'utente su tutte le applicazioni associate. Il mantenimento della sicurezza e dell'integrità delle installazioni Single Sign-On (SSO) multi-applicazione richiede questa comunicazione bidirezionale.

Lo script JavaScript è essenziale per tracciare le attività dell'utente in tempo reale sul front-end. Ogni volta che l'utente interagisce con il programma, reimpostiamo il timeout della sessione utilizzando ascoltatori di eventi come `onmousemove} e `onkeypress`. Un timer impostato con `setTimeout()` avvisa l'utente e lo disconnette automaticamente dall'SP (MyApp) quando l'utente diventa inattivo. Dopo la disconnessione, il processo di disconnessione SAML 2.0 precedentemente trattato viene avviato dallo script frontend che invia una richiesta SLO al backend utilizzando `fetch()`. Questa tecnica garantisce che l'inattività a livello di SP venga affrontata tempestivamente, in modo sicuro e senza errori.

Quando l'integrazione SAML 2.0 e sono combinati, l'esperienza dell'utente è fluida e gli standard di sicurezza sono rispettati. Per evitare che l'utente rimanga autenticato più a lungo di quanto consentito durante l'inattività, il timeout della sessione avvia sia il logout dell'SP locale che il logout dell'IDP. Sebbene SAML 2.0 non richieda alcuna condotta particolare in merito ai timeout delle sessioni, è generalmente accettata come best practice l'utilizzo della scadenza della sessione per avviare lo SLO. Terminando le sessioni inattive, si raggiunge un equilibrio tra sicurezza ed esperienza utente abilitando i logout sincronizzati su varie piattaforme connesse tramite SSO.

Utilizzo di Node.js ed Express per gestire la disconnessione singola SAML 2.0 con timeout della sessione

Metodo backend per la gestione dello SLO SAML 2.0 con timeout delle sessioni del fornitore di servizi utilizzando Node.js ed Express. Questa soluzione utilizza le richieste SAML per verificare se la sessione è scaduta e avviare lo SLO a livello del provider di identità.

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

Utilizzo del frontend JavaScript e del rilevamento del timeout di inattività per gestire lo SLO SAML 2.0

In un metodo frontend, viene rilevato un timeout della sessione utilizzando JavaScript vanilla per monitorare l'inattività dell'utente e avviare il Single Log Out (SLO). Ciò indica al fornitore di servizi di inviare una richiesta SLO al fornitore di identità.

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

Esplorazione di SAML 2.0: disconnessione singola e timeout di inattività

Come si indirizza SAML 2.0 Single Log Out (SLO). a livello di fornitore di servizi (SP) è una componente fondamentale da gestire. Sebbene sia ovvio che un logout manuale presso l'SP dovrebbe causare anche il logout del provider di identità (IDP), i timeout della sessione causati dall'inattività complicano le cose. Lo standard SAML 2.0 non indica chiaramente come gestire lo SLO alla scadenza delle sessioni. Ciò consente, tuttavia, l'adozione di migliori pratiche in grado di migliorare l'esperienza dell'utente e la sicurezza.

Ad esempio, anche dopo essere stati esclusi dall'SP a causa di inattività, gli utenti che accedono a un'applicazione come MyApp tramite Microsoft Entra (IDP) spesso rimangono connessi all'IDP. Se l'utente ritiene di essere completamente disconnesso mentre altre app che utilizzano lo stesso SSO sono ancora in esecuzione, il problema potrebbe aumentare . L'impostazione della gestione delle sessioni SAML per simulare l'evento di timeout SP a livello IDP e garantire disconnessioni sincronizzate è un modo per ridurre questo rischio.

Un altro fattore è l'implementazione da parte del codice frontend delle tecniche di rilevamento dei periodi di inattività. Gli sviluppatori possono anticipare i tempi di inattività e avvisare gli utenti prima che la sessione scada utilizzando i listener di eventi per l'attività degli utenti. Utilizzando questo, gli utenti possono mantenere il controllo sulle proprie sessioni e assicurarsi che le proprie non funziona continuamente. In un ambiente integrato SSO, gli sviluppatori possono preservare la sicurezza e il comfort dell'utente trovando un equilibrio tra questi fattori.

  1. Cosa succede a livello di fornitore di servizi quando una sessione scade?
  2. Di solito, l'utente viene disconnesso dal programma quando una sessione scade a livello SP. Dipende da come è configurato il sistema, poiché le specifiche SAML 2.0 non richiedono che ciò causi uno SLO sull'IDP.
  3. Uno SLO presso il provider di identità dovrebbe essere attivato dal timeout della sessione del provider di servizi?
  4. La politica dell'organizzazione regola questo. Sebbene SAML 2.0 non lo imponga, molti scelgono di attivare lo SLO sull'IDP al termine della sessione SP per motivi di sicurezza.
  5. Al termine di una sessione inattiva, come posso attivare lo SLO?
  6. La scadenza della sessione può essere rilevata tramite un meccanismo di backend, che quindi avvia un procedura per effettuare una richiesta SLO all'IDP.
  7. Come viene rilevata l'inattività della sessione sul frontend?
  8. Agli ascoltatori di eventi piace as E sono comunemente usati per tenere traccia dell'inattività poiché reimpostano un timer ogni volta che un utente interagisce con l'applicazione.
  9. Dopo essersi disconnessi dall'SP, è sicuro tenere aperta la sessione IDP?
  10. Potrebbe verificarsi un rischio per la sicurezza lasciando aperta la sessione IDP, in particolare se l'utente ritiene di aver effettuato il check-out completo. Si consiglia di configurare lo SLO per replicare la scadenza della sessione SP.

Per mantenere la sicurezza in un sistema SSO è necessario assicurarsi che il provider di identità e il fornitore di servizi sincronizzino i rispettivi processi di disconnessione. Anche se SAML 2.0 non impone come gestire i timeout delle sessioni, molte aziende gestiscono i singoli logout in modo uniforme.

Si consiglia di inviare una richiesta SLO ogni volta che la sessione del fornitore di servizi termina a causa di inattività per migliorare la sicurezza. Ciò garantisce che l'utente si sia disconnesso dal provider di identità e dall'applicazione, evitando accessi indesiderati su molte piattaforme.

  1. La documentazione dettagliata sugli standard e sulle linee guida SAML 2.0 e Single Log Out è disponibile nel documento ufficiale Specifiche di base di OASIS SAML 2.0 .
  2. Per approfondimenti su Microsoft Entra e sulla sua integrazione con SSO e SLO, fare riferimento alla documentazione ufficiale Microsoft su Azure Active Directory e SAML .
  3. La libreria SAML Node.js utilizzata negli esempi, insieme alle tecniche di gestione delle sessioni, può essere esplorata ulteriormente nella pagina Documentazione della libreria SAML2-js .
  4. Per comprendere le best practice nella configurazione del Single Sign-On e nella gestione delle sessioni, consulta l'articolo su Migliori pratiche SSO da Auth0.