Entrambe le scelte si riferiscono all'algoritmo utilizzato dal provider di identità per firmare il JWT. La firma è un'operazione crittografica che genera una "firma" (parte del JWT) che il destinatario del token può convalidare per garantire che il token non sia stato manomesso.
RS256 (RSA Signature con SHA-256 ) è un algoritmo asimmetrico e utilizza una coppia di chiavi pubblica / privata: il provider di identità ha una chiave privata (segreta) utilizzata per generare la firma e il consumatore del JWT ottiene una chiave pubblica per convalidare la firma. Poiché la chiave pubblica, a differenza della chiave privata, non ha bisogno di essere protetta, la maggior parte dei provider di identità lo rende facilmente disponibile per i consumatori per ottenere e utilizzare (di solito tramite un URL di metadati).
HS256 ( HMAC con SHA-256), d'altra parte, comporta una combinazione di una funzione di hashing e una chiave (segreta) condivisa tra le due parti utilizzate per generare l'hash che servirà da firma. Poiché la stessa chiave viene utilizzata sia per generare la firma sia per convalidarla, è necessario assicurarsi che la chiave non sia compromessa.
Se svilupperai l'applicazione che utilizza i JWT, puoi tranquillamente usare HS256, perché avrai il controllo su chi usa le chiavi segrete. Se, d'altra parte, non hai il controllo sul client o non hai modo di proteggere una chiave segreta, RS256 sarà più adatto, dal momento che il consumatore deve solo conoscere la chiave pubblica (condivisa).
Poiché la chiave pubblica viene generalmente resa disponibile dagli endpoint dei metadati, i client possono essere programmati per recuperare automaticamente la chiave pubblica. Se questo è il caso (come nelle librerie .Net Core), avrai meno lavoro da fare sulla configurazione (le librerie prenderanno la chiave pubblica dal server). Le chiavi simmetriche, d'altra parte, devono essere scambiate fuori banda (garantendo un canale di comunicazione sicuro) e aggiornate manualmente in caso di rollover delle chiavi di firma.
Auth0 fornisce endpoint di metadati per i protocolli OIDC, SAML e WS-Fed, in cui è possibile recuperare le chiavi pubbliche. È possibile visualizzare tali endpoint nelle "Impostazioni avanzate" di un client.
L'endpoint dei metadati OIDC, ad esempio, assume la forma di https://{account domain}/.well-known/openid-configuration
. Se si accede a tale URL, verrà visualizzato un oggetto JSON con un riferimento a https://{account domain}/.well-known/jwks.json
, che contiene la chiave pubblica (o le chiavi) dell'account.
Se guardi gli esempi RS256, noterai che non è necessario configurare la chiave pubblica da nessuna parte: viene recuperata automaticamente dal framework.