Considere el siguiente flujo de autenticación.
- El usuario envía su nombre de usuario y una contraseña cifrada RSA
- La contraseña se descifra y se revisa con una sal (y posiblemente una pimienta) y se verifica
- Si el hash coincide, se genera un GUID como un token y el token recibe un TTL y una fecha de caducidad y se devuelve al usuario. Además, se guarda la dirección IP de la persona que llama
- Ese nombre de usuario con el token se usa para cualquier interacción futura con la base de datos (cada vez que se usa el token se extiende su fecha de caducidad). Solo la IP que creó el token puede usar el token.
- El inicio de sesión desde una nueva IP debe verificarse primero mediante una segunda forma de autenticación (por ejemplo, un código enviado al correo electrónico de los usuarios)
¿Cuáles son las preocupaciones de seguridad de este sistema de autenticación?
Siento que un sistema de este tipo usaría tokens incorrectamente, ya que según lo que he leído, parece que el propósito de los tokens es la autorización y no la autenticación. Siento que el único beneficio de usar el token es que se puede usar una contraseña para iniciar sesión en cualquier momento y el token finalmente caduca, por lo que si caduca, al final será inútil.
Una de mis preocupaciones sería si alguien está constantemente escuchando e interceptando el token, lo que esencialmente significa que podría usarlo para acceder a la base de datos siempre que haya un token activo (y se pueda actualizar indefinidamente un token para mantenerlo activo). Esta es la razón por la que la dirección IP se almacenaría y el acceso solo se otorgaría a esa dirección IP. Esto minimizaría el riesgo de mal uso de la ficha.
En general, un token no puede devolverse cifrado, ¿cómo puede alguien evitar que un token sea interceptado y mal utilizado?