He implementado una autenticación sin estado a través de HTTP en Laravel, usando JWTs.
- Envié mi nombre de usuario / contraseña desde la interfaz.
- El servidor autentica al usuario, devuelve un JWT firmado con un tiempo de caducidad.
- Estoy usando el algoritmo HS512 para firmar con una clave privada (solo disponible para el servidor).
- El frontend almacena el token para futuras solicitudes.
- El frontend envía la siguiente solicitud con el token incluido.
- El servidor verifica que el token es válido y no está vencido, y permite que la acción continúe en caso afirmativo a ambos.
- Cuando el token caduca, el servidor envía un mensaje de "cierre de sesión".
Todas estas comunicaciones se producen a través de HTTPS.
Así que puedo ver que esto es seguro desde estos puntos:
- Los atacantes no pueden oler el tráfico y robar el token JWT debido a HTTPS.
- Los atacantes no pueden generar ni enviar ningún token extraño porque el servidor verifica la firma usando su clave privada.
- Los atacantes no pueden modificar qué usuario (y, por lo tanto, la función + permisos del solicitante) realiza la solicitud, porque eso es parte de la reclamación
sub
en el token.
Pero tengo dos preguntas :
- ¿Qué sucede si hay un virus en la computadora o dispositivo móvil del usuario y se robó un token válido de la memoria RAM o del navegador? Luego puede enviar más solicitudes, y serán aceptadas. ¿Hay alguna forma de protegerse contra esto?
- ¿Hay otra forma de atacar este sistema que no estoy viendo?