Estoy creando un sitio con Spring, que requiere autenticación para poder acceder a ciertas páginas.
El sitio en realidad está compuesto por un host cliente, que representa las vistas y maneja el enlace de datos, y un host de API REST (también construido con Spring), su responsabilidad es devolver / manipular datos, validación / generación de token de usuario etc.
Decidí implementar una autenticación personalizada en el lado de REST. Al recibir un nombre de usuario y una contraseña válidos, volverá:
- JWT firmado por la API REST con AES-256, la carga útil contendrá la identificación del usuario y la fecha de caducidad.
- El JWT se almacena en una cookie, que es solo HTTP, segura y válida solo desde el dominio del sitio del cliente (¿es suficiente para contrarrestar los ataques csrf de medida?)
La única puerta trasera en la que podría pensar es si el atacante roba la cookie, por lo que podría agregar a la carga de JWT un valor aleatorio único para el usuario (que está almacenado en la base de datos), y en el caso de que el usuario esté sospechando que su sesión fue robada, podría emitir una solicitud para restablecer el valor único, haciendo que el token robado sea inútil.
¿Me estoy perdiendo alguna puerta trasera que pueda permitir que un atacante omita la autenticación fácilmente? ¿Debo usar Spring Security en su lugar? Me temo que no podré lograr el comportamiento sin estado que tengo actualmente ...
¡Gracias!