Sto lavorando su un'applicazione web client-server, e come schema di autenticazione, sto emettendo token web json codificati base64. Considera il seguente token ...
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Decodificato come tale ...
{
"alg": "HS256", // header
"typ": "JWT"
},
{
"sub": "1234567890", // payload
"name": "John Doe",
"admin": true
},
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), 'secret') // signature
La mia preoccupazione è con la porzione payload
di questo token, in cui desidero fornire rivendicazioni definite ad es. %codice%. La mia preoccupazione è che questi valori siano visibili e manomessi dall'utente finale una volta emessi. Se modifichi questa porzione, non invaliderà il controllo della firma. Non desidero persistere alcun dato sul server per ricontrollare / confrontare i token emessi - Vorrei mantenere il server completamente stateless .
Ho pensato di firmare il token, crittografandolo tramite AES 256 e utilizzarlo come mio "token". Il flusso verrebbe riassunto come tale ...
- genera e firma token codificato base64
- codifica lato server token tramite AES 256
-
Invia token crittografato al client
-
richiesta richiesta, token crittografato fornito
- decrypt token server side
- convalidare la firma del token codificato con originale base64 (ora in grado di garantire che le attestazioni non siano state alterate)
I miei pensieri sono, le richieste (carico utile) non saranno viste, e qualsiasi manomissione di questo valore cifrato ovviamente non decifrerà come previsto dal lato server. La mia domanda è - questo è possibile? Non sono riuscito a trovare molto sul web per crittografare interi token. C'è un modo migliore ?