Devo memorizzare le mie rivendicazioni utente nel token JWT?

14

Sto usando i token JWT nelle intestazioni HTTP per autenticare le richieste a un server delle risorse. Il server di risorse e il server di autenticazione sono due ruoli di lavoro separati su Azure.

Non riesco a truccarmi se dovrei memorizzare le attestazioni nel token o collegarle alla richiesta / risposta in un altro modo. L'elenco delle attestazioni influisce sul rendering degli elementi dell'interfaccia utente lato client e sull'accesso ai dati sul server. Per questo motivo voglio assicurarmi che le richieste ricevute dal server siano autentiche e convalidate prima che la richiesta venga elaborata.

Esempi di affermazioni sono: CanEditProductList, CanEditShopDescription, CanReadUserDetails.

I motivi per cui voglio utilizzare il token JWT sono:

  • Migliore protezione contro la modifica delle richieste da parte del cliente (ad esempio l'elenco delle richieste di pirateria informatica).
  • Non è necessario cercare le attestazioni su ogni richiesta.

I motivi per cui non voglio utilizzare il token JWT:

  • Il server di autenticazione deve conoscere l'elenco di attestazioni incentrato sull'app.
  • Il token diventa un singolo punto di hack-entry.
  • Ho letto alcune cose che dicono che i token JWT non sono destinati ai dati a livello di app.

Mi sembra che entrambi abbiano degli svantaggi, ma mi sto appoggiando all'inclusione di queste affermazioni nel token e voglio solo farlo funzionare da persone che hanno già avuto a che fare con questo.

NOTA: Userò HTTPS per tutte le richieste API, quindi mi sembra che il token sia "abbastanza" sicuro. Uso AngularJS, C #, Web API 2 e MVC5.

    
posta Astravagrant 18.02.2015 - 18:38
fonte

2 risposte

6

Memorizzo solo le richieste di identificazione (userid, ecc.) (crittografate) nel mio jwt.

Quindi quando ottengo il token sul server (API) posso eseguire una ricerca sul lato server (db o chiamata api della rete locale) e recuperare tutte le associazioni sull'userid (app, ruoli, ecc.)

Tuttavia, se vuoi aggiungere altro materiale al jwt, fai attenzione alle dimensioni, poiché probabilmente verrà inviato su ogni richiesta, ma assicurati di crittografare i dati dei reclami sensibili.

    
risposta data 18.02.2015 - 23:57
fonte
2

Sembra un'autenticazione (chi è l'utente) e l'autorizzazione (ciò che l'utente è autorizzato a fare) non è così chiaramente divisa come vorresti.

Se non si desidera che il server di autenticazione sappia a cosa è concesso l'utente, limitare le richieste in quel JWT all'ID utente proprio come suggerito da wchoward. Potresti avere un altro server noto come server di autorizzazione per cercare ciò a cui l'utente ha diritto.

La fase di autorizzazione può essere eseguita dal server delle risorse quando viene presentato per la prima volta con un token di autenticazione dal client. Il server delle risorse invierà quindi un token al client contenente le attestazioni di autorizzazione.

Nota: entrambe le JWT devono essere firmate con chiavi diverse.

Pro:

  • Autenticazione e autorizzazione sono gestite separatamente.
  • Il server delle risorse non deve cercare l'autorizzazione per ogni richiesta.
  • L'interfaccia utente ha accesso per visualizzare l'autorizzazione ma non per modificarla.

Con:

  • Il client deve gestire due token anziché uno.
  • L'aggiunta di un server di autorizzazione aggiunge un'altra parte mobile da gestire.
risposta data 05.02.2016 - 22:24
fonte

Leggi altre domande sui tag