tools nodejs example security authentication oauth-2.0 jwt

security - nodejs - login jwt express



JWT & OAuth2: ¿el servidor almacena el token? ¿Y cómo son seguros/Hacker seguro? (2)

No entiendo por qué un intermediario (o un pirata informático) no podría ver el token enviado por el cliente y utilizarlo para hacerse pasar por ese cliente / persona para recuperar recursos.

JWT no te protege contra un ataque de hombre en el medio (MITM). Si un atacante obtiene un token válido, puede suplantarlo efectivamente. Incluso si el contenido está encriptado.

JWT debe usarse con una conexión SSL / TLS para evitar MITM

¿Qué hace que las autenticaciones basadas en JSON Web Tokens / OAuth2 sean más seguras en ese sentido?

JWT es un formato de token y oauth2 es un protocolo. oauth2 puede usar jwt. Oauth2 es más seguro para el usuario que usa un sitio de terceros porque las credenciales solo se envían del usuario al sitio principal, luego el sitio emite un token que puede ser utilizado por el sitio de terceros para autenticar al usuario. El sitio de terceros nunca ve las credenciales del usuario

Pero como el token permanece igual hasta que caduca, ¿cómo es eso una estrategia de autenticación más segura?

Lea más arriba. Debe proteger sus tokens para no ser robados: use HTTPS principalmente, o mitigue sus efectos: almacene en cookies con HttpOnly (si no necesita acceder al contenido de JWT en el lado del cliente), defina el tiempo de vencimiento, gire los tokens ...

¿Cómo sabe el servidor que el token enviado por el cliente es válido, es decir, algo que el servidor intercambió con el cliente durante el inicio de sesión?

La tercera parte de un JWT como hhhh.pppp.ssss es la firma. La firma se realiza con la clave privada del servidor sobre el encabezado y la carga útil (hhhh.pppp), y protege el contenido. Si un atacante altera el contenido o la firma, el servidor lo detectará verificando la firma y rechazará la autenticación.

¿El servidor almacena el token generado en una base de datos o en algún lugar y sigue actualizando la "última marca de tiempo visitada" o algo así y sigue eliminando los tokens donde last_accessed_time es> 1 hora atrás, para que caduque después de 1 hora de inactividad?

No es necesario. La firma está empaquetada en el token ( ssss ), por lo que se dice que JWT es autónomo.

El servidor tiene una clave secreta criptográfica o un par de claves, pública y privada. El token se firma y verifica con la clave secreta (para claves simétricas HMAC), o se firma con la clave privada y se verifica con la clave pública correspondiente (para claves asimétricas RSA).

Soy un noob completo en cuanto a seguridad, estrategias de autenticación. Así que estaba leyendo este artículo sobre "Autenticación basada en token": https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

Tengo 2 preguntas:

  1. No entiendo por qué un intermediario (o un pirata informático) no podría ver el token enviado por el cliente y utilizarlo para hacerse pasar por ese cliente / persona para recuperar recursos. ¿Qué hace que las autenticaciones basadas en JSON Web Tokens / OAuth2 sean más seguras en ese sentido? Si usamos un token de uso único una vez, entendería que incluso si el pirata informático puede leer el token, no podrá usarlo para otra solicitud. Pero como el token permanece igual hasta que caduca, ¿cómo es eso una estrategia de autenticación más segura?

  2. ¿Cómo sabe el servidor que el token enviado por el cliente es válido, es decir, algo que el servidor intercambió con el cliente durante el inicio de sesión? ¿El servidor almacena el token generado en una base de datos o en algún lugar y sigue actualizando la "última marca de tiempo visitada" o algo así y sigue quitando los tokens donde last_accessed_time es> 1 hora atrás, para que caduque después de 1 hora de inactividad?


Se trata de firmar el token y no cifrarlo. El servidor simplemente verifica la firma, JWT no está encriptado (a menos que lo implementes). No almacene datos confidenciales en el token, ya que no está cifrado de forma predeterminada.