Estoy creando una aplicación SPA usando Angular. Esto servirá a mis dos propósitos para la capa intermedia en el sitio web para dispositivos móviles.
Ahora estoy tratando de proteger mi aplicación de XSS, CSRF y también quería un mecanismo de autenticación seguro. Mis servicios serán servicios sin estado de Resful.
Este es el flujo que creo que me ayudará.
- La aplicación del cliente envía el ID de usuario y la contraseña al servidor.
- El servidor valida la solicitud y genera el token que se almacenará en db.
- Este token = ID de usuario + Número aleatorio + Marca de tiempo
- el token se enviará de vuelta a la APP del cliente.
- la aplicación del cliente la almacenará en un almacenamiento local o cookie.
- Con cada solicitud posterior validaré el token con una tienda en db.
Áreas problemáticas
- ¿Dónde debe guardarse el token? ¿Cookie o almacenamiento local?
- En el servidor, el token debe almacenarse en algún lugar. Si se almacena en db que aumentará la carga en la base de datos.
- Como voy a usar la solicitud AJAX, ¿cómo debo pasar el encabezado o el cuerpo del token value?
- Desde este mismo código base que usaré también para mi sitio web, ¿qué tan seguro es este enfoque para el sitio web?
- ¿Cómo abordar el ataque CSRF en este caso?
Me he referido a Asegurando una aplicación de página única de JavaScript con backend RESTful también. Pero el almacenamiento de la ID de usuario nuevamente en Cookies creará un agujero de seguridad. Porque tanto el ID de usuario como el token se almacenan en el lado del cliente.