Vedo ampiamente utilizzati due diversi tipi di autenticazione, di cui uno molto più complesso dell'altro. Uno è i token ID sessione semplici utilizzati nella maggior parte dei siti Web (l'utente invia le informazioni di accesso, riceve un token e passa quel token con ogni richiesta futura come autorizzazione). L'altra è la firma HMAC utilizzata in alcune API (utilizza chiavi pubbliche / private per la codifica dei messaggi).
Dall'esterno, il metodo HMAC sembra molto più sicuro. I messaggi non possono essere falsificati o duplicati, sai che il messaggio è sempre autentico. Tuttavia richiede molto più lavoro per comprimere e firmare ogni richiesta, e richiede un modo per il client di accedere alle chiavi pubbliche / private da utilizzare per la firma.
Per contratto, i token sono in circolazione da molto tempo e sembrano relativamente sicuri se usati correttamente (trasmettono solo tramite SSL, passano un nuovo token con ogni risposta del server, registrano l'ultimo token utilizzato, ecc.), e non richiedono alcuna gestione delle chiavi.
Quindi perché la firma HMAC esiste sul web? Esistono scenari in cui i token di sessione semplici non possono essere protetti? Se sì, perché i token sono ancora in uso?
I token sono molto più facili da progettare un thin client quando non devo trovare un modo per passare le chiavi, ma non voglio nemmeno spararmi ai piedi ignorando eventuali buchi di sicurezza.