Estoy trabajando en una aplicación web servidor-cliente y, como esquema de autenticación, estoy emitiendo json web tokens . Considera el siguiente token ...
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Decodificado como tal ...
{
"alg": "HS256", // header
"typ": "JWT"
},
{
"sub": "1234567890", // payload
"name": "John Doe",
"admin": true
},
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), 'secret') // signature
Mi preocupación es con la porción payload
de este token, donde deseo proporcionar reclamos definidos, por ejemplo. %código%. Mi preocupación es que estos valores sean visibles y manipulados por el usuario final una vez emitidos. La modificación de esta parte no invalidará la comprobación de firma. No deseo conservar los datos en el servidor para volver a verificar / comparar los tokens emitidos. Deseo mantener el servidor completamente sin estado .
Pensé que tal vez firmaría el token, lo cifraría mediante AES 256 y lo usaría como mi "token". El flujo se resumiría como tal ...
- generar y firmar el token codificado en base64
- cifrar el lado del servidor de token a través de AES 256
-
Emita token cifrado al cliente
-
solicitud recibida, token encriptado suministrado
- descifrar el lado del servidor del token
- validar la firma del token original codificada en base64 (ahora puede garantizar que las reclamaciones no se hayan modificado)
Mi opinión es que las reclamaciones (carga útil) no se verán, y cualquier alteración de este valor cifrado obviamente no se descifra como se espera del servidor. Mi pregunta es: ¿es esto viable? No pude encontrar mucho en la web para cifrar tokens completos. ¿Hay una mejor manera ?