Interrelación Ciberseguridad y Programación - G10-ISPC/Frontend-Mobile GitHub Wiki
Autenticación y Autorización basada en JWT
Introducción
La autenticación y la autorización son pilares clave para garantizar la seguridad en las aplicaciones modernas. En este proyecto, se ha optado por implementar un sistema de autenticación basado en JSON Web Tokens (JWT) debido a su escalabilidad, seguridad y facilidad de integración con los diferentes componentes del sistema (backend y frontend). Además, se ha implementado un esquema de autorización basado en roles (Role-Based Access Control) para administrar las acciones que los usuarios pueden realizar en función de su perfil (admin o cliente).
A) Política de Autenticación: Basada en JWT
Elección y Fundamentación
La elección de JWT como sistema de autenticación fue fundamentada en el Sprint 1 por las siguientes razones:
• Seguridad: Los tokens JWT son firmados y codificados con un secreto fuerte, lo que garantiza su autenticidad y evita manipulaciones.
• Eficiencia: Los JWT no requieren consultas constantes a la base de datos, ya que contienen la información del usuario y los permisos dentro del propio token.
• Estándar: JWT es ampliamente aceptado y compatible con muchos sistemas, lo que facilita su integración con el backend (Django Rest Framework) y el frontend (Android Studio con Retrofit).
Prevención de Vulnerabilidades
• Ataques de secuestro de sesión: Los JWT se utilizan para validar cada solicitud, y su firma asegura que no puedan ser manipulados por terceros.
• Ataques de fuerza bruta (DDoS): La implementación de tokens de acceso con tiempos de vida cortos, combinada con tokens de actualización, dificulta los intentos de ataques de fuerza bruta.
Implementación de Medidas
• JWT en el backend: Implementación de djangorestframework-simplejwt para generar y verificar tokens.
• Secreto fuerte: Los tokens se firman con un secreto robusto y almacenado de forma segura.
• Refresh Tokens: Los tokens de acceso expiran en un tiempo breve y se utilizan tokens de actualización para mantener las sesiones activas de manera segura.
Revisión: frecuencia.
• Mensualmente: Revisar la seguridad de los tokens y su gestión.
• Cada 6 meses: Evaluar y actualizar el mecanismo de autenticación.
B) Política de Autorización: Basada en Perfiles y Permisos
###Implementación de Autorización según Perfiles
El sistema de autorización se basa en los roles del usuario (admin o cliente), definidos en el backend y aplicados tanto en el backend como en el frontend para restringir el acceso a diferentes funcionalidades.
• Admin: Puede gestionar productos y acceder al panel administrativo.
• Cliente: Puede visualizar productos, gestionar y eliminar su cuenta.
Control en Backend
Se aplican permisos personalizados en las vistas de Django Rest Framework. Los usuarios solo pueden acceder a ciertas funcionalidades según su rol, mediante clases como admin y cliente, que aseguran que solo los usuarios autorizados puedan realizar determinadas operaciones.
Control en Frontend
En Android, el token JWT se almacena y contiene los permisos del usuario, lo que permite a la interfaz gestionar qué opciones están disponibles para el usuario dependiendo de su rol.
C) Protección de Datos en Tránsito: Uso de HTTPS
Vulnerabilidades Prevenidas
• Interceptación de datos: Mediante la implementación de HTTPS, se asegura que los datos en tránsito estén cifrados, previniendo ataques de tipo man-in-the-middle.
• Robo de datos: Los tokens y cualquier otro dato sensible se cifran para evitar que sean interceptados durante las comunicaciones.
Medidas Implementadas
• Configuración de HTTP en el servidor backend.
• Cifrado de datos sensibles: Asegurando que toda la comunicación se realice de manera segura utilizando HTTP.