È sicuro restituire un JWT a un utente già registrato?

0

Uso JWT per gestire uno schema SSO in cui due sistemi (chiamiamoli A e B) richiedono entrambi l'autenticazione, ma l'archivio dati utente si trova in un solo sistema (diciamo A). Tutto ciò che ho visto su JWT coinvolge l'utente che registra nome utente / password per ricevere il JWT, ma quello che mi chiedo è se è sicuro restituire un JWT a un utente già registrato.

Per renderlo un po 'più concreto, il sistema di autenticazione A (esempio.com) utilizza un'autenticazione basata su cookie / sessione, ma il secondo sistema B (sottodominio.esempio.com) necessita dell'autenticazione da parte del JWT. Non vogliamo forzare gli utenti già registrati che hanno un cookie di sessione a inserire nuovamente username / password per ottenere un JWT, quindi pensiamo che implementeremo un endpoint API che restituisce un JWT a un utente che ha già effettuato l'accesso (tramite l'autenticazione della sessione), che l'utente può quindi autenticare con il sistema B. In particolare, utilizziamo il JWT di Django REST Framework, che offre la possibilità di creare manualmente il JWT: link

Quindi ad es. avremmo un endpoint API in cui è possibile GET https://systemA.com/api/gimme-jwt/

if user is already authed: return JWT else: return 401

Ancora una volta, la differenza fondamentale tra questo e tutto ciò che ho visto è che stiamo restituendo un JWT a un utente che ha già effettuato l'accesso.

    
posta andy 19.11.2015 - 23:52
fonte

3 risposte

1

In realtà la domanda dovrebbe essere

How can I be certain a signed in user is the same person who signed in so I can send them a JWT?

E la risposta è che non puoi. Ciò è dovuto alle migliori pratiche di sicurezza:

Assume all input from users is fake or an attack until proven otherwise.

Ciò significa che devi richiedere loro di ri-autenticarsi per ricevere il JWT, altrimenti non puoi essere sicuro che non lo abbiano lasciato aperto e se ne vada.

Un'altra considerazione è che devi utilizzare canali crittografati e crittografare il JWT. Se questo è su HTTPS, puoi impostarlo come valore di un cookie per rendere la vita un po 'più semplice e sicura.

Le JWT portano un po 'di overhead con loro anche se in ogni caso è necessario decrittografarle, verificarle e quindi modificarle se necessario, quindi ricodificarle, ma non c'è modo di aggirarle altrimenti trasferire informazioni di stato non criptate che sono sempre un no-no.
Dovresti esaminare le pratiche comuni con JWT e i vettori di minacce conosciuti che esistono a causa di esso.

    
risposta data 19.04.2016 - 20:33
fonte
0

A condizione che tu sia sicuro di dare il JWT all'utente reale che ha effettuato il login, consegnarlo dopo l'autenticazione non è un problema.

    
risposta data 20.11.2015 - 05:06
fonte
0

Fornire un token JWT all'utente autenticato non è un problema, ma devi tenere in considerazione le seguenti considerazioni:

  1. Il tuo ambiente è sicuro (è una rete interna o pubblica)? Utilizzi il trasporto sicuro (TLS) per le comunicazioni? In caso contrario, ti preoccuperai dell'integrità dei token e della privacy utilizzando JWS e \ o JWE
  2. Trasferisci dati PII (Informazioni identificabili personalmente)? In tal caso, dovresti sempre utilizzare la crittografia per i token.

In ogni caso, prima di utilizzare i token JWT, esaminare la specifica link di OpenID Connect che descrive in realtà come usa i token JWT per SSO, alcune vulnerabilità e problemi di privacy comuni.

    
risposta data 20.11.2015 - 05:23
fonte

Leggi altre domande sui tag