Un token al portatore / asserzione JWT / SAML / altro artefatto utilizzato in un sistema SSO rappresenta una rivendicazione verificata, verificabile, autorevole del diritto di un utente specifico, con durata temporanea. JWT ha un tempo di scadenza (ad esempio expires_in = 3600
secondi), mentre un'asserzione SAML ha un tempo di scadenza timbro (ad esempio Not on or after = 2017-06-20 11:38:01
).
A parte questo, tutto è molto generale. La rivendicazione del diritto potrebbe essere qualsiasi cosa: appartenenza a un ruolo, accesso a una risorsa, ecc.
Due approcci generali
Ci sono due modi in cui ho visto questo tipo di meccanismo utilizzato in un contesto di autenticazione:
1. L'asserzione / token / artefatto rappresenta il diritto di accedere a un sistema.
In questo caso, il token del server di autenticazione ha essenzialmente una durata di lunga durata (ad esempio 20-40 minuti) e funge da cookie di sessione multi-dominio. Quando è vicino alla scadenza, dovresti tornare al server di autenticazione per farlo "aggiornato" o "rinnovato" e potresti finire per ottenere un token nuovo di zecca come risultato.
In alcuni sistemi, l'operazione di aggiornamento richiede un round trip al server di autenticazione nel browser stesso . In altri, può essere realizzato tramite il servizio web sul back-end. Quest'ultimo è meno "puro" di un'implementazione (idealmente, solo il server di autenticazione dovrebbe essere in grado di distribuire token) ma in determinate circostanze è necessario mantenere le cose più pulite per l'utente finale: può essere molto fastidioso prendere il browser da qualche altra parte, anche temporaneamente.
2. Il token rappresenta il diritto di avviare l'accesso a un sistema
In questo caso, il server di autenticazione emette un token di durata relativamente breve (ad esempio, 60 secondi) e il server di dominio utilizza questo token come una sorta di password nel proprio meccanismo di gestione delle sessioni. Il server di dominio emetterebbe quindi il proprio cookie di sessione e il token del server di autenticazione non sarebbe più necessario. Il server di dominio dovrebbe essere responsabile dell'aggiornamento di tutti i cookie di sessione, che di solito è molto banale perché questo genere di cose è incorporato nelle piattaforme web, ad es. Autenticazione moduli ASP.NET.
Il lato negativo di questo approccio è che non è un vero SSO ... non puoi navigare senza problemi da un dominio all'altro senza tornare al server di autenticazione per ottenere un nuovo token per avviare una nuova sessione specifica per il dominio. Ma il lato positivo è che è molto più semplice da implementare.
Quindi ... devi aggiornare?
Sì, ma a seconda del modo in cui hai architettato le cose, potresti aggiornare il token emesso dal server di autenticazione oppure potresti aggiornare un token proprietario del dominio, l'ultimo dei quali è banale.