Estoy diseñando una API REST para una aplicación móvil y tengo algunas dudas sobre la seguridad del acceso a las cuentas.
Estoy escribiendo el servidor de API en nodeJS y lo consumirá principalmente un cliente móvil (aunque se puede agregar un cliente web en el futuro)
Hay 2 aspectos secundarios principales que deseo incorporar en el proceso de autenticación:
- El ID de los usuarios está codificado en el token (para reducir el estrés en la base de datos)
- El usuario solo puede tener 1 token válido a la vez (el inicio de sesión anula cualquier token anterior)
Aquí está mi diseño inicial (todos los puntos finales están sobre SSL):
Iniciar sesión
- usuario POST es su nombre de usuario y amp; contraseña para '/ login'
- El servidor verifica que los usuarios existen y la contraseña coincide con el hash bcrypt en la Db
- El servidor genera un uuid v4 para el usuario y lo almacena en Rojos con el ID de los usuarios como clave
- Los usuarios uuid y el ID de usuario se codifican en un token web de Json con una caducidad de 1 semana
- El JWT se envía de vuelta a los usuarios como su token de autenticación
Ruta protegida
- El usuario envía la solicitud GET '/ users / me' con su token configurado como Autorización: encabezado del portador
- El servidor verifica el JWT y envía las respuestas de error apropiadas si falla la verificación
- El servidor luego consulta el almacén Redis y verifica que el uuid almacenado para el usuario coincida con el uuid codificado en el JWT
- Si los uuids coinciden, el ID de los usuarios se establece en req.user y la solicitud se procesa, si no, el mensaje de error se devuelve
¿Esto parece una buena estrategia de autenticación o estoy muy lejos?