Soy el autor de una biblioteca de nodos que maneja la autenticación con bastante profundidad, express-stormpath , por lo que intervendré con información aquí.
En primer lugar, los JWT generalmente NO están encriptados. Si bien hay una manera de cifrar los JWT (ver: JWE ), esto no es muy común en la práctica por muchas razones.
A continuación, cualquier forma de autenticación (usando JWT o no) está sujeta a ataques MitM (ataques intermedios). Estos ataques suceden cuando un atacante puede VER SU tráfico de RED a medida que realiza solicitudes a través de Internet. Esto es lo que su ISP puede ver, la NSA, etc.
Esto es contra lo que SSL ayuda a prevenir: al encriptar el tráfico de su RED desde su computadora -> algún servidor cuando se autentica, un tercero que está monitoreando el tráfico de su red NO puede ver sus tokens, contraseñas ni nada por el estilo a menos que de alguna manera puedan para obtener una copia de la clave SSL privada del servidor (poco probable). Esta es la razón por la que SSL es OBLIGATORIO para todas las formas de autenticación.
Digamos, sin embargo, que una persona es capaz de explotar su SSL y es capaz de ver su ficha: la respuesta a su pregunta es que sí , el atacante será capaz de utilizar esa señal para usted y solicitudes de maquillaje suplantar a su servidor.
Ahora, aquí es donde entran los protocolos.
Los JWT son solo un estándar para un token de autenticación. Se pueden usar para casi cualquier cosa. La razón por la cual los JWT son geniales es que puede incrustar información adicional en ellos, y puede validar que nadie se haya metido con eso (firma).
SIN EMBARGO, los JWT en sí mismos no tienen nada que ver con la 'seguridad'. Para todos los efectos, los JWT son más o menos lo mismo que las claves API: solo cadenas aleatorias que se utilizan para autenticarse en algún servidor.
Lo que hace que su pregunta sea más interesante es el protocolo que se está utilizando (probablemente OAuth2).
La forma en que funciona OAuth2 es que fue diseñado para dar a los clientes tokens TEMPORALES (¡como JWT!) Para autenticación solo durante un PERÍODO CORTO DE TIEMPO!
La idea es que si te roban el token, el atacante solo puede usarlo por un corto período de tiempo.
Con OAuth2, debe volver a autenticarse con el servidor de vez en cuando al proporcionar su nombre de usuario / contraseña O credenciales API y luego obtener un token a cambio.
Debido a que este proceso ocurre de vez en cuando, tus tokens cambian con frecuencia, lo que hace que sea más difícil para los atacantes hacerse pasar constantemente por ti sin pasar por grandes problemas.
Esperemos que esto ayude ^^