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.