Gestisce i token di autenticazione dell'applicazione Web

0

Sono nuovo del concetto di token di autorizzazione.

Sto sviluppando un'app angolare che chiama l'API Web costruita con asp.net core . Attualmente sto utilizzando JWT (Token web JSON) per autorizzare gli utenti. Questi token vengono emessi dopo il login e inviati nelle intestazioni di autorizzazione a ogni richiesta. I token durano per 30 minuti . Ora il problema è che, a differenza dei cookie che possono avere scadenza di scorrimento , non ho idea di come implementare la scadenza di scorrimento. Sto cercando di implementare token di aggiornamento, ma non sono sicuro quando rilasciare un token di aggiornamento.

Il token di aggiornamento dovrebbe essere emesso prima di ogni richiesta? In tal caso, come invalidarli?

Il token di aggiornamento dovrebbe essere emesso prima della scadenza di 30 minuti e l'utente può essere autorizzato?

Dovrebbe esserci uno schedulatore per verificare la scadenza del token prima di ogni 30 minuti?

    
posta Ruchan 23.08.2016 - 07:42
fonte

1 risposta

1

Ci sono alcune alternative diverse e, come sempre, il più appropriato dipenderà da molte cose.

In termini generali, se sia l'applicazione Angular che le API Web sono sotto il tuo controllo (stesso dominio o sottodominio), non escluderei la possibilità di utilizzare solo i cookie. Potrebbe semplificare le cose, anche se ora hai lo svantaggio di dover gestire la possibilità di CSRF.

Un'altra opzione, il mantenimento dell'uso dei token è di rinnovarli automaticamente allo stesso modo di un cookie di sessione. Ad esempio, restituendo un'intestazione HTTP di risposta contenente il token aggiornato. Potresti farlo solo dopo che è passata l'emivita del token per ridurre il sovraccarico sul filo. Questo ha il rovescio della medaglia che un gettone trapelato, può essere automaticamente rinnovato per sempre dall'attaccante.

In termini di aggiorna token (vedi sezione sulla sicurezza), se finisci per memorizzarli nello stesso posto come token di accesso ci si troverebbe in una situazione identica allo scenario precedente in caso di perdita, quindi potrebbe non essere di grande aiuto.

Assumendo sempre la stessa possibilità di dominio, puoi provare un approccio misto, login ritorna al token di accesso e imposta un cookie di scadenza scorrevole che consente di chiamare in un endpoint specifico per ottenere un token di accesso aggiornato. Ha il vantaggio che non devi preoccuparti di CSRF perché l'accesso è garantito dal token di accesso e riduce la probabilità di perdite di credenziali a lungo termine (essendo il ragionamento che il cookie sarebbe solo HTTP, sicuro e con scope per il percorso di quell'endpoint specifico). Ciò garantirebbe che qualsiasi vulnerabilità XSS nell'applicazione provocherebbe solo un token di accesso di breve durata e CSRF non sarebbe un problema, poiché si potrebbe sfruttare il criterio della stessa origine per non rivelare il token di accesso restituito da tale endpoint.

Su una nota completamente diversa, puoi andare a pieno OpenID Connect / OAuth 2.0 costruendo il tuo provider di identità / server di autorizzazione o affidandoti a una soluzione di terze parti come Auth0 ( disclosure : al momento lavoro su Auth0). Potresti quindi optare per un flusso di concessione implicito che potrebbe fornire automaticamente nuovi token di accesso purché l'utente mantenga una sessione attiva nel provider di identità e non revochi l'accesso a questa applicazione.

La linea di fondo è che l'autenticazione e l'autorizzazione non sono argomenti lineari ...

    
risposta data 14.10.2016 - 18:16
fonte

Leggi altre domande sui tag