Ho appena letto questo articolo che ha alcuni anni ma descrive un modo intelligente di proteggere le API REST. Essenzialmente:
- Ogni client ha una coppia di chiavi pubblica / privata unica
- Solo il client e il server conoscono la chiave privata; non viene mai inviato tramite il 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 (in base alla chiave pubblica fornita) ed esegue un controllo del timestamp (che certamente non capisco) che verifica che la richiesta non sia vittima di un attacco di riproduzione
- Se tutto va bene, il server utilizza la chiave privata e la stessa funzione HMAC per generare il proprio hash della richiesta
- Il server quindi confronta entrambi gli hash (quello inviato dal client e quello che ha generato); se corrispondono, la richiesta viene autenticata e autorizzata a procedere
Poi mi sono imbattuto in JWT , che suona molto simile. Tuttavia, il primo articolo non menziona affatto JWT, quindi mi chiedo se JWT sia diverso dalla soluzione di autenticazione di cui sopra e, in tal caso, come.