Sto studiando i token Web JSON e voglio provare a creare il mio server di autenticazione (non preoccuparti, non verrà eseguito in produzione da nessuna parte). La mia comprensione fino ad ora è questa: crei una stringa JSON che contiene tutti i dati che desideri e crea un hash basato su questi dati usando un segreto, che includi anche nel JWT. Il segreto è condiviso tra il server di autenticazione e il server delle applicazioni. Il server delle applicazioni che invii le tue richieste utilizza lo stesso segreto per ricalcolare l'hash e confrontarlo con quello nel JWT.
Ora, se per qualche ragione il tuo server delle applicazioni viene compromesso e il segreto viene fuori, sei sfortunato. E potresti non volere che i tuoi utenti analizzino i tuoi JWT. Quindi mi è venuta in mente questa idea:
Avere il server di autenticazione crittografare il JWT con una chiave privata, e quindi avere il server dell'applicazione decrittografarlo con la chiave pubblica significa due cose: i client non possono ispezionare il contenuto dei propri JWT e un comprimato server delle applicazioni significa che si sta ancora non è possibile creare JWT falsi, in quanto la chiave privata non è ancora compromessa. Decodificare con la chiave pubblica significa anche sapere che il JWT proviene dal server di autenticazione. Per quanto posso dire, la crittografia con la chiave privata e la decrittografia con quella pubblica, anche se inusuale, non dovrebbero portare a una crittografia più debole.
La mia domanda: c'è qualcosa di sbagliato nel mio modo di pensare, che potrebbe portare a questo tipo di sistema di autenticazione non funzionante o facile da compromettere?