2013-11-26 15 views
5

Ci sono alcuni argomenti simili qui in Stackflow ma non trovo nessuno di loro ha risposto alla mia domanda.Come deve essere memorizzato il token di accesso all'API Web?

ASP.NET Web API 2 è ciò che usiamo ora. Ora sono in grado di accettare la richiesta di autenticazione CORS dalla mia WebAPI. Con il token di accesso inviato nell'intestazione Authorization (Bearer xxx), sono in grado di accedere alle risorse protette dai tag [Authorize].

Il problema è, come è possibile implementare una funzione simile a una casella di controllo "Ricordami" nel modulo di accesso normale? Tutto ciò che vogliamo è che l'utente non debba effettuare nuovamente l'accesso la prossima volta che visita la nostra pagina web. Il token di accesso è solo per una sessione? In che modo WebAPI2 imposta la scadenza del token? Come possiamo salvare alcune informazioni nella sessione o utilizzare la memoria locale per memorizzare tali informazioni di autenticazione? Quando archiviamo questo token nel lato client, abbiamo bisogno di una sorta di crittografia per proteggerlo?

Qual è il tuo suggerimento nell'implementazione di questa funzione "Ricordami"?

+0

Grazie per il montaggio, b__. – Blaise

risposta

4

Il provider di autenticazione dovrebbe darti le funzionalità per farlo. Questo è molto semplice da fare se si utilizza il provider di appartenenze ASP.Net:

FormsAuthentication.RedirectFromLoginPage(strUserName, true); 

Il "vero" di cui sopra, imposta un cookie persistente.

Quando si utilizza CORS e si invia il cookie di autenticazione al proprio WebApi, a WebApi non interessa se l'autenticazione proviene da un vecchio cookie "Ricordami" o da un nuovo accesso. Tutto ciò che importa è che il valore del cookie passato nell'intestazione di autorizzazione è valido.

Per quanto riguarda la crittografia del cookie, questo è anche qualcosa che il fornitore di autenticazione dovrebbe darti immediatamente.

+0

Grazie per la risposta. Stiamo utilizzando CORS e il token di accesso deve essere memorizzato sul lato client, che è solo HTML e JavaScript. Sembra che tu suggerisca di archiviare il token all'interno di un cookie, non è vero? – Blaise

+0

Sì, questo è quello che sto facendo. Devo aggiungere ora che stiamo usando un STS centralizzato che utilizza i certificati per crittografare il token di autenticazione. È inutile senza il certificato di decodifica sul client. Questo è il motivo per cui non è un problema per me utilizzare un cookie per questo e mi consente di utilizzare la soluzione pronta all'uso per questo. Se non vuoi questo, puoi dare un'occhiata a ThinkTecture.com. Questi ragazzi hanno una soluzione che ti permette di inviare un token Json per l'autenticazione Cors. – Morten

+0

Grazie. posso sapere che cosa "STS centralizzato" stai usando? – Blaise

6

"Il problema è, come posso implementare una funzione simile ad un 'Ricordati di me' casella di controllo nella form di login regolare?"

Salvare il token nel localStorage lato client quando "Ricordati di me" è selezionata => Quando la scheda/browser è chiusa, il token è ancora attivo e la volta successiva si accede automaticamente

Salva il token nella memoria della sessione del client quando "Ricordami" non è selezionato => Ogni volta che chiudi una scheda/browser, la memorizzazione della sessione viene cancellata. La prossima volta che controlli il token non esiste. Quindi devi effettuare nuovamente il login ...

"Tutto quello che vogliamo è che l'utente non abbia bisogno di accedere di nuovo la prossima volta che visita la nostra pagina web."

Vedere la risposta sopra!

Il token di accesso è solo per una sessione?

SÌ una scheda nel browser è una sessione.

In che modo WebAPI2 imposta la scadenza del token?

Imposta l'ora in cui il token scade!

Come possiamo salvare alcune informazioni nella sessione o utilizzare la memoria locale per memorizzare tali informazioni di autenticazione?

memorizzare solo gettone cifrato sul lato client mai userid/password

quando archiviamo questo token nel lato client, abbiamo bisogno di un qualche tipo di crittografia per proteggerlo?

Il token è crittografato sul lato server quindi inviato al client per ogni richiesta. Il client non ha bisogno di essere in grado di leggere il token. Il client deve semplicemente inviarlo con una richiesta everry.

+2

Conosco la domanda e la risposta è vecchia, ma ancora: Problema con sessionStorage è che non è persistente tra le schede dello stesso browser. Se l'utente prova ad aprire una nuova scheda/finestra da un collegamento semplicemente per non perdere il lavoro che sta facendo sulla scheda/finestra corrente, l'applicazione chiederà di accedere nuovamente perché per quella nuova scheda/finestra non ci sarà un oggetto in sessionStorage più ... – CesarD

Problemi correlati