Repository navigation
Seguridad
Los Guards en Angular son interfaces que se encargan de dar o no dar acceso a rutas dependiendo de la autenticación del usuario. Actualmente, en nuestro sitio web, si no somos autenticados a través de los servicios correspondientes, la aplicación no nos dará acceso a la vista de "Mi cuenta", implementada en el path "/user", generando un redireccionamiento al formulario de login.
Se implementó la autenticación básica (Basic Authentication) en Django para proteger los endpoints de la API.
La autenticación básica en Django se utiliza para restringir el acceso a los endpoints de la API, asegurando que solo los usuarios autenticados puedan interactuar con ellos. Este mecanismo requiere que los clientes envíen un encabezado Authorization con sus credenciales (nombre de usuario y contraseña) codificadas en base64 en cada solicitud.
En nuestro proyecto, se configuró la autenticación básica de la siguiente manera:
-
Configuración del Middleware: En el archivo
settings.py, se añadiórest_framework.authentication.BasicAuthenticationen la configuración deDEFAULT_AUTHENTICATION_CLASSESdel framework Django Rest Framework (DRF):REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.BasicAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], }
-
Protección de los Endpoints: Con esta configuración, todos los endpoints de la API requieren autenticación. Si un usuario no está autenticado, recibirá una respuesta con el código de estado HTTP 401 (Unauthorized).
-
Proceso de Autenticación:
- Cuando el cliente intenta acceder a un endpoint protegido, debe incluir el encabezado
Authorizationen la solicitud HTTP. El formato del encabezado esAuthorization: Basic <credentials>, donde<credentials>es la cadena resultante de concatenar el nombre de usuario y la contraseña con dos puntos (username:password), y luego codificar esta cadena en base64. - Django decodifica las credenciales y verifica que el usuario existe y que la contraseña es correcta.
- Si las credenciales son válidas, el usuario obtiene acceso al endpoint. De lo contrario, se le deniega el acceso.
- Cuando el cliente intenta acceder a un endpoint protegido, debe incluir el encabezado
Ejemplo de una solicitud con autenticación básica usando curl:
curl -u username:password http://yourdomain.com/api/your-endpoint/Con esta configuración, garantizamos que solo los usuarios autenticados puedan interactuar con los datos sensibles a través de nuestra API, proporcionando una capa adicional de seguridad en nuestra aplicación.
Actualmente la aplicación guarda las contraseñas de cada usuario aplicando un algoritmo de cifrado Blowfish que genera un hash. De esta manera, las contraseñas no son guardadas en texto plano y por más que un administrador con permisos tenga acceso a estos datos, no podrá conocer dichas claves originales.