Skip to content

Seguridad

Juan Manuel Sanchez Fin edited this page Jun 2, 2024 · 5 revisions

Web Site

Se aplicó el uso de Guards en Angular, protegiendo las rutas a nivel de la UI.

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.

API Endpoints

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:

  1. Configuración del Middleware: En el archivo settings.py, se añadió rest_framework.authentication.BasicAuthentication en la configuración de DEFAULT_AUTHENTICATION_CLASSES del framework Django Rest Framework (DRF):

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.BasicAuthentication',
        ],
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
        ],
    }
  2. 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).

  3. Proceso de Autenticación:

    • Cuando el cliente intenta acceder a un endpoint protegido, debe incluir el encabezado Authorization en la solicitud HTTP. El formato del encabezado es Authorization: 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.

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.

App mobile

Se implementó la librería BCrypt en Java para hashing de passwords.

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.

Clone this wiki locally