Tengo una aplicación web en la que los usuarios pueden iniciar sesión. Debido a limitaciones técnicas, la aplicación no tiene permitido almacenar ninguna información de sesión en el disco.
Para identificar las solicitudes del mismo usuario sin almacenar las sesiones en el disco, he diseñado el siguiente esquema:
La aplicación tiene un S secreto del lado del servidor largo, generado aleatoriamente, creado en el momento de la instalación. Hay un usuario con un nombre de usuario u y una contraseña p .
Para iniciar sesión, el usuario presenta (u, p) a la aplicación web para la autenticación en el momento t . Si la autenticación es exitosa, envía una cookie c en la respuesta, que contiene Encrypt (u || t, S) . Encrypt en este caso es AES-256 en modo de operación CBC.
Más tarde, cuando llega una solicitud que contiene c , la aplicación descifra el contenido de c con S para obtener u y t . Obviamente, si u no es un usuario válido, la solicitud es rechazada. Además, la solicitud se rechaza si la diferencia entre la hora actual y t es mayor que x . Rechazar la solicitud implica pedirle al cliente que elimine c y redirigir al usuario a la página de inicio de sesión.
Si el usuario envía una solicitud en el momento t + y , como k < = y < = x , la aplicación actualiza c actualizándolo a Cifrar (u || t + y, S) . k se elige para que sea un valor adecuado, como x / 3 .
Cerrar sesión implica simplemente pedirle al navegador que elimine c .
¿Este método de autenticación es seguro?