# Security

Esta sección explica algunos metodos del módulo security, que se encuentran bajo el directorio app/ext, y en donde se especifican métodos de generación y comprobación de contraseñas, mensajes para el estado de la aplicación, perfiles predefinidos, validación de sesiones, tokens y permisos según los roles y permisos establecidos.

Como se especifica en la sección de Settings se recomienda cambiar los valores de SECRET_KEY y CSRF_SESSION_KEY al igual que el valor de la variable hash_key que se encuentra en el archivo app/ext/security/crypto.py

hash_key = '-please-change-this-key-secret-for-backend-base-3.x-code-name-'

Las cuales en conjunto, son utilizadas con el fin de generar una contraseña más segura para las cuentas de usuario.

# AuthProfiles

Esta clase define perfiles predefinidos, usados por la aplicación. Ejemplo:

ACTIVE = 'Active'
INACTIVE = 'Inactive'
DISABLED = 'Disabled'
...
GOTU = 'GOTU'
ADMINISTRATOR = 'ADMIN'
ANONYMOUS_USER = 'ANONYMOUS_USER'
from app.ext.rest import Rest, HttpStatus
from app.ext.security import AuthProfiles
...

result = Companies.and_([
    ('status', '==', AuthProfiles.ACTIVE)
], True)

if result is not None:
    if len(result) > 0:
        return Rest.response(200, HttpStatus.OK, result)

# AuthStatus

Esta clase define mensajes predefinidos, usados por la aplicación. Ejemplo:

SESSION_EXPIRED = "The session was expired, please login and try again!"
SESSION_NOT_EXISTS = "The server could not verify that a session exists."
...
INVALID_ROLE = "Access denied. can not be accessed with the current role"
UNEXPECTED_ERROR = "Unexpected Error"
from app.ext.rest import Rest
from app.ext.security import AuthStatus
...

return Rest.response(400, AuthStatus.UNEXPECTED_ERROR, errors=str(e))

# Notas

Como se comentaba mas arriba, las constantes SECRET_KEY, CSRF_SESSION_KEY, y la variable hash_key, son utilizadas en conjunto con el usuario y contraseña proporcionado por el usuario, para generar un hash que finalmente es nuevamente cifrado y firmado utilizando el módulo werkzeug.security.

Si se han generado contraseñas anteriormente y se cambia el valor de alguna de las constantes citadas, la verificación de las contraseñas (usado por el método check_password) fallará y NO se podrá acceder a la aplicación.

Se recomienda realizar el cambio de estos valores, al iniciar el desarrollo de la aplicación.

El BackEndBase utiliza pbkdf2:sha512 (opens new window) (Función de derivación de clave basada en contraseña 2) para generar las contraseñas con un costo (opens new window) por defecto de 10, son funciones de derivación clave, con un costo computacional variable, que se utilizan para reducir las vulnerabilidades a los ataques de fuerza bruta, sobre las contraseñas. Para más información consulte el modulo crypto.

# Issues

Para cualquier duda, comentario, sugerencia ó aporte, dirigete a la sección de issues. (opens new window) Antes de abrir un issue nuevo, revisa los ya existentes, en busca de una solución (posiblemente ya planteada) para el problema que se te presenta.