Token web JSON: ¿por qué es pública la carga útil?

30

No puedo entender el razonamiento para hacer públicos los reclamos / carga útil de un JWT después de decodificarlo en base64.

¿Por qué?

Parece que sería mucho más útil cifrarlo con el secreto.

¿Alguien puede explicar por qué, o en qué situación, mantener esta información pública es útil?

necesito ayuda
fuente
cuando escribes JWT, probablemente te refieres a JWS. Porque JWE (que también es "subclase" de JWT) en realidad cifra su contenido.
Alexey

Respuestas:

28

Eliges no encriptar la carga útil por las mismas razones por las que eliges no encriptar nada más: el costo (por pequeño que sea) excede el beneficio, y muchos datos simplemente no necesitan ser asegurados de esa manera.

Sobre todo contra lo que necesita protección es que las personas manipulen los datos para que se actualice el registro incorrecto o que la cuenta corriente de alguien obtenga dinero que no se supone que tenga. La firma de JSON Web Token logra eso, porque cambiar cualquier parte de la combinación de encabezado / carga / firma invalida el paquete.

Tenga en cuenta que aún puede proteger los paquetes en la capa de transporte utilizando SSL.

Robert Harvey
fuente
Ah, ya veo, así que esencialmente JWT es un nuevo token CSRF. Gracias por su explicación, ha aclarado la confusión.
ineedhelp
66
No JWT no es un nuevo token CSRF. Esas son 2 cosas diferentes.
Ash
@ash si los detalles de una operación se almacenan en el JWT y se validan en el servidor, ¿no es el JWT esencialmente el rol de prevención de CSRF en ese escenario? Entiendo que el propósito principal de un JWT de vainilla es la autenticación, eso es muy claro en esta respuesta. Creo que estaba imaginando agregar más datos y lograr dos cosas a la vez.
ineedhelp
@RobertHarvey, está utilizando JWT incorrectamente. JST es un término "paraguas" para JWS y JWE. JWS es para autenticar, JWE es para encriptar. Entonces, "El propósito de un token web JSON es autenticar" debería ser en realidad "JWS es autenticar".
Alexey
@Alexey: hice un ligero cambio en mi respuesta para complacer.
Robert Harvey
4

El uso del término firma en el RFC es análogo a una firma digital en criptografía asimétrica. En la criptografía asimétrica, si el remitente cifra un mensaje con su clave privada, cualquiera que tenga el mensaje puede descifrarlo con la clave pública del remitente. Entonces, el objetivo con el término firma no es mantener un mensaje en secreto, sino verificar la integridad / remitente del mensaje, eso no se ha modificado.

En el caso de los JWT, el sistema de envío es tanto el creador como el consumidor del mensaje (vea el diagrama a continuación), y el objetivo es asegurarse de que el token pasado al usuario no haya sido alterado (por ejemplo, con privilegios elevados).

Y como mencionó @Robert, los JWT pueden / deberían estar encriptados con TLS.

Aquí hay una buena explicación de JWT y firmas de las cuales se obtiene la imagen a continuación. 5 pasos sencillos para comprender los tokens web JSON (JWT)

asdfasdf

Micah B.
fuente
2

Para agregar a la respuesta de Robert Harveys, hay una desventaja significativa en el cifrado de la carga útil: significa que el destinatario del servicio necesita compartir un secreto con el servidor de autenticación (la clave de cifrado) para comprender si el portador del token está autorizado o no. o no. Por el contrario, cualquiera puede validar un JWT utilizando solo la clave pública publicada por el servidor de autenticación.

Esta es una parte clave de la especificación Openid Connect, ya que permite que las aplicaciones del cliente validen los tokens de identidad emitidos por el servidor de autenticación, también facilita la implementación de servidores de recursos (ya que no es necesario implementarlos con acceso al cifrado secreto) clave) y también ayuda al intentar diagnosticar cualquier problema con un JWT emitido.

Justin
fuente
Estás tratando de comparar mecanismos de cifrado asimétrico y simétrico, jwt es una implementación de cifrado RSA.
TheAnimatrix