Sicurezza dell'API REST: HMAC / key hashing vs JWT

13

Ho appena leggi questo articolo che è di alcuni anni vecchio ma descrive un modo intelligente per proteggere le tue API REST. In sostanza:

  • Ogni client ha una coppia di chiavi pubblica / privata univoca
  • Solo il client e il server conoscono la chiave privata; non viene mai inviato sul filo
  • Con ogni richiesta, il client accetta diversi input (l'intera richiesta stessa, il timestamp corrente e la chiave privata) e li esegue attraverso una funzione HMAC per produrre un hash della richiesta
  • Il client invia quindi la richiesta normale (che contiene la chiave pubblica) e l'hash al server
  • Il server cerca la chiave privata del client (basata sulla chiave pubblica fornita) e fa un controllo di timestamp (che ammetto che non capisco) che verifica che la richiesta non sia vittima di un attacco di rimbalzo
  • Se tutto va bene, il server utilizza la chiave privata e la stessa funzione HMAC per generare il proprio hash della richiesta
  • Il server confronta quindi entrambi gli hash (quello inviato dal client e quello generato); se corrispondono, la richiesta viene autenticata e autorizzata a procedere

Poi mi sono imbattuto in JWT , che sembra molto simile. Tuttavia, il primo articolo non menziona affatto JWT e quindi mi chiedo se JWT sia diverso dalla soluzione auth precedente e, in tal caso, come.

    
posta smeeb 16.09.2015 - 15:26
fonte

1 risposta

7

Iniziamo con una risposta molto semplice.

JWT (come usato nel contesto di OAuth e OpenID) non richiede segreti condivisi tra client e API. Ci sono 3 componenti e coppie di 2 condividono un segreto ciascuno: client < - > server di identificazione, server di identificazione < - > API.

Questo sposta la maggior parte della complessità dall'API al server di identificazione, l'API deve solo verificare che il token sia stato emesso dal server di identificazione e non sia stato moderato. Per verificare che l'API verifichi che la firma JWT sia valida con il singolo segreto condiviso noto tra il server di identificazione e l'API. Questo è tutto!

Il modo in cui il server di identificazione convalida l'identità dell'utente può variare notevolmente (in molti casi è la vecchia coppia nome utente + password su una connessione TLS), ma non ha alcun effetto sulla tua API.

La privacy e la sicurezza del messaggio e il token stesso quando si utilizza JWT sono gestiti da TLS, JWT è all'oscuro di tali problemi.

    
risposta data 18.09.2015 - 19:39
fonte

Leggi altre domande sui tag