2015-07-28 10 views
7

Sto implementando OAuth (usando rauth) e fornirò i token JWT (usando flask-jwt), javascript frontend (Angular1). L'ho fatto per l'app classica basata su cookie/sessioni. Funziona. Ora voglio farlo con i token JWT.Come assegnare un token JWT utente dopo il reindirizzamento del provider OAuth?

Se ho capito correttamente, l'utente viene reindirizzato al provider (ad esempio Google), l'accesso viene effettuato, il server e il provider eseguono la magia, quindi il provider reindirizza l'utente alla mia pagina. Ora ho ottenuto il profilo utente e questo termina la parte OAuth. Con la sessione normale dai i cookie degli utenti e il resto del materiale per l'impostazione della sessione, quindi reindirizzalo alla home page.

Questo è il punto in cui sono bloccato. Esiste qualche buona pratica su come fornire il token JWT dell'utente dopo che il fornitore lo ha richiamato? Darlo all'utente come cookie sul reindirizzamento alla home page? Mettilo nell'intestazione? Per quanto ne so ho bisogno di javascript per salvare il token in LocalStorage/SessionStorage.

risposta

6

Alla fine della giornata, l'utente verrà reindirizzato alla nostra app in cui una pagina deve essere ora renderizzata. L'unica opzione che vedo è di restituire il JWT come cookie perché le intestazioni di risposta non sono accessibili in Javascript & l'unico altro posto sarebbe quello di incorporarlo nel DOM che lo aprirà agli attacchi CSRF.

Quando il browser viene reindirizzato dal provider OAuth, avrà solo un codice di accesso che può essere scambiato per un token di accesso sul lato server. Ma le best practice dicono che è necessario mantenere quel token di accesso segreto (non restituirlo al browser).

C'è molto dibattito su JWT nei cookie rispetto all'archiviazione locale/di sessione, ma in questo caso d'uso non vedo altra opzione che usare i cookie. Tutti i casi d'uso che ho visto che descrivono usando la memoria del browser presumono che sia stata fatta una richiesta XHR per ottenere il JWT. Ma questa non è un'opzione in un flusso OAuth perché l'intero browser è stato appena reindirizzato alla nostra app.

Non vedo un'altra opzione (per il caso d'uso OAuth) diversa dal mantenere il JWT in un cookie da utilizzare per le future chiamate API. Ma forse mi manca qualcosa.