¿Cuál es el beneficio de JWT si el usuario necesita enviar sus credenciales una vez?

2

Las fichas JWT parecen ser una muy buena idea. Puede enviar una solicitud a alguna API sin usar su par secreto de nombre de usuario / contraseña.

Sin embargo, no entiendo completamente los beneficios que brinda. Tengo dos preguntas:

  1. Para obtener el token, el usuario aún debe enviar sus credenciales a algún servidor que emita estos tokens. ¿No es un punto débil de todo esto?
  2. Si el atacante roba la ficha mientras se transfiere, puede usarla para fingir que es otra persona. La única diferencia entre esto y la combinación de usuario / contraseña es que los tokens JWT caducan después de un período de tiempo, por lo que el atacante no tiene mucho tiempo para hacer lo suyo.

¿Mi entendimiento es correcto? ¿Qué me estoy perdiendo? ¿Cuáles son las ventajas reales de usar JWT vs usuario / contraseña?

    
pregunta Loreno 19.08.2018 - 19:36
fuente

2 respuestas

7

Supongamos que hay 2 servidores: TRUSTED (por ejemplo, Google) y UNTRUSTED (cualquier sitio que permita 'Iniciar sesión con Google' ).

No quiero enviar mi nombre de usuario y contraseña TRUSTED a UNTRUSTED . Tampoco quiero hacer un nombre de usuario y contraseña separados para UNTRUSTED .

Entonces, en lugar de eso, obtengo TRUSTED para autenticarme y enviar un JWT firmado que contiene mi identidad a UNTRUSTED para demostrar quién soy. UNTRUSTED puede verificar si el JWT es realmente de TRUSTED al verificar la firma JWT usando la clave pública de TRUSTED (si el algoritmo de firma usa claves públicas / privadas, por ejemplo, RS256).

Los JWT pueden ser robados en tránsito, al igual que los nombres de usuario y las contraseñas, por lo que esto es un riesgo real (aunque, como mencionó, los JWT caducarán antes). HTTPS minimizará el riesgo al cifrar los datos en tránsito.

Otro beneficio importante del uso de JWT es que verificar una firma suele ser más rápido que verificar un token de acceso en una base de datos (debido a la base de datos y al almacenamiento tiempo de acceso ).

    
respondido por el Irfan434 19.08.2018 - 20:46
fuente
2

Te estás perdiendo un punto; en la mayoría de las arquitecturas API, el servidor no tiene una sesión de las diferentes llamadas realizadas por el mismo cliente, esto se describe como servidor sin estado , es por eso que el cliente debe proporcionar el token de autenticación en cada solicitud aquí donde JWT es útil.

  

... la razón principal por la que es mejor usar un token en lugar de   account_id / password es para evitar la circulación frecuente de la contraseña   sobre el alambre Recuerde La naturaleza sin estado de API, hace que el   cliente para proporcionar credenciales en cada solicitud.

( enlace )

    
respondido por el elsadek 19.08.2018 - 21:34
fuente

Lea otras preguntas en las etiquetas