JWT vs certificati client

6

Abbiamo un server di transazione a cui sono collegate diverse applicazioni client. Il requisito è disporre di un metodo di autenticazione sicuro per le applicazioni client per comunicare con il server di transazione. Le due soluzioni esaminate sono JWT e certificati client.

Secondo te, quali sono i vantaggi e gli svantaggi di entrambe le opzioni dal punto di vista della sicurezza e dell'efficienza. Mi rendo conto che questa domanda è un po 'generica ed è proprio perché vogliamo ottenere alcune idee più generalizzate prima di passare a una soluzione specifica considerando che questi componenti sono ancora in fase di sviluppo.

Qualche consiglio da parte di coloro che hanno usato entrambe le tecnologie sarebbe apprezzato!

    
posta Nixman55 24.06.2016 - 18:20
fonte

2 risposte

2

Per un po 'di contesto, ho lavorato molto con l'autenticazione basata su token JWT ma ho poca esperienza con i certificati client, quindi la mia risposta appesiderà il pregiudizio (informazione e opinione) a JWT.

Token Pro JWT:

  • Può essere facilmente generato (o rigenerato) e può includere date / ore di scadenza per ridurre i danni dovuti a un token JWT rubato
  • Può includere "attestazioni" nel payload per portare informazioni extra, forse il ruolo del dispositivo client o letteralmente qualsiasi coppia chiave-valore che vorresti
  • Facile da trasportare come una volta codificati sono solo una stringa
  • Un'ampia maggioranza di lingue dispone di librerie per fare la maggior parte del lavoro pesante. Vedi: pagina delle librerie

Contro token JWT:

  • In genere è necessario un server di autenticazione o un modulo sul server Transaction per erogare questi
  • Le cose possono diventare molto complicate o impossibili a seconda di come il tuo cliente ha bisogno di autenticarsi. Fintanto che l'utente ha credenziali di accesso, è possibile utilizzarle per autenticare inizialmente il client prima di inviare il token JWT. Altrimenti, hai bisogno di mezzi per confermare inizialmente l'autenticità del client

Certificati client Pro:

  • Richiede l'installazione di un singolo certificato (al momento della configurazione? dipende solo) una volta
  • Non richiede alcun codice sul lato server per creare e distribuire certificati allo stesso modo di JWT

Contro certificati del cliente:

  • Se un certificato viene mai compromesso, può essere utilizzato negli attacchi in stile replay per tutto il tempo in cui è valido (e non scoperto per essere compromesso, altrimenti potrebbe essere elencato in nero)
  • Richiede un punto di archiviazione permanente sicuro sul dispositivo client. A differenza dei token JWT che potrebbero essere archiviati in modo sicuro nella memoria e infine distrutti al momento dello spegnimento del client o della chiusura dell'applicazione, il certificato dovrebbe essere salvato in modo permanente in un luogo sicuro. A seconda di cosa sia esattamente il cliente, questo può essere molto difficile o impossibile

La mia opinione: i token JWT sono un metodo di autenticazione client sicuro e standardizzato e lo consiglierei.

    
risposta data 30.01.2018 - 17:03
fonte
0

Non è possibile rispondere a questa domanda senza conoscere meglio il tuo ambiente.

  • È tutto nel tuo dominio o questi esterni si collegano al tuo servizio?
  • Questi servizi richiedono un diverso insieme di permessi l'uno dall'altro?
  • Questi servizi vengono utilizzati per delegare un'identità utente utilizzata a valle?
  • In che modo questi servizi comunicano tra loro? RIPOSO? Binary?
  • Qual è lo stack tecnologico con cui stai lavorando?

I certificati client sono utili come modo per autenticarsi, ma se il tuo requisito è di avere permessi diversi per i servizi che accedono al tuo servizio, un certificato client di per sé non aiuterà. Come menzionato sopra, dovrai gestire i certificati che hai emesso, ma questo costrutto esiste con JWT che richiedono di essere firmati. Se disponi di più certificati per gli esterni,

Le JWT sono utili se i consumatori hanno permessi diversi e stanno accedendo al tuo servizio tramite REST. Se la comunicazione non è REST, non preoccuparti dei JWT. Dovrai gestire anche il certificato di firma nelle JWT. Se hai intenzione di utilizzare i JWT, devi essere consapevole dei punti deboli che hanno:

  • Attacchi algoritmici contro librerie che rispettano il nessuno valore
  • JWT replay attack
  • Le JWT richiedono TLS sul livello di trasporto
  • Alcuni framework JWT consentono di attaccare il sistema alterando i tipi di algoritmi da RS256 a HS256 e firmando con la chiave pubblica

Non c'è nulla di sbagliato nelle JWT se implementate correttamente, le sue sole persone possono rovinare l'implementazione del JWT. Sono un pregiudizio perché attualmente sto cercando di indirizzare i modelli JWT nella mia organizzazione che portano a lacune di sicurezza perché la validazione ha ignorato le date di scadenza ...

    
risposta data 30.01.2018 - 22:19
fonte

Leggi altre domande sui tag