# Modelo de Autorización de Acceso a Recursos ### Resource Access Authorization Model [RAAM] El RAAM es un conjunto de conceptos y convenciones para implementar políticas de seguridad a través de un sistema de gestión de usuarios desacoplado. ## Conceptos * Organización. Es la representación de una empresa o institución, un ente jurídico que posee recursos accedidos por usuarios. * Usuario. Es la representación de quien hace uso de los recursos de una organización, un empleado, socio, colaborador, voluntario, etc. * Espacio de trabajo. Es una estructura con un propósito funcional formada por equipos y usuarios. * Equipo. Es una subestructura funcional de un espacio de trabajo a la cual pueden pertenecer usuarios. * Rol. Representa un papel (rol) asignado a usuarios dentro de un equipo. <img src="img/rel-elementos.svg"/> * Operación. Es una acción atómica sobre un recurso. * Privilegio. Es el derecho a realizar una operación sobre un recurso. * Manifiesto de privilegios. Es el conjunto de privilegios asignados a usuarios, roles, equipos o espacios de trabajo de un recurso. * Membresía. Es la relación (pertenencia) de un usuario a un rol, equipo o espacio de trabajo. * Recurso. Es la representación de un objeto de valor para la organización (archivo, servicio, proceso, etc.). ## Estructuras de datos ### Manifiesto de privilegios ``` { "Privilegio":[{ "tipo_asignacion": "identificador"}, ...], ... } ``` Donde: * Privilegio. Es una cadena que identifica (o nombra) un privilegio. * tipo_asignación. Es alguna de las cadenas: "user", "role", "team", "workspace" o bien, el nombre de una propiedad esperada en la información de la sesión de usuario. * identificador. Es el identificador del tipo de objeto indicado en el tipo de la asignación. ### Información de sesión de usuario ``` { "ids":"Identificador (token) de sesión", "uid":"Identificador de usuario", "name":"Nombre del usuario", "propiedad1":"valor propiedad 1", ..., "memberships": { "workspaces":["id_workspace1",...], "teams":["id_team1",...], "roles":["id_role1",...] } ... } ``` ## Componentes <img src="img/raam-components.svg"/> La solicitud de realización de una operación es recibida por la Interfaz del sistema [System Interface] que recaba información del usuario a través del Proveedor de Identificaciones (Id Provider) y el manifiesto de privilegios por parte del Directorio de recursos [Resource Directory] que son enviados al Controlador de Autorizaciones [Authorization Controller] que determinará si se realiza la solicitud o se deniega. * System Interface. Permite la interacción del sistema con el exterior, ya sea una interfaz de usuario (Web o escritorio), servicios Web, etc. * Id Provider. Valida la identidad del usuario (a través del par de credenciales usuario y contraseña o bien un identificador 'token' de sesión) y proporciona toda la información de la estructura Información de la sesión de usuario. * Resource Directory. Proporciona la información en la estructura de datos del manifiesto de privilegios de un recurso identificable unívocamente. * Authorization Controller. Comprueba si la solicitud de operación requiere privilegios y si el usuario los posee para autorizar o denegar su realización. ### Controlador de Autorizaciones La lógica interna del Controlador de Autorizaciones es dependiente del sistema y está fuertemente acoplada al mismo, sin embargo se espera funcione concediendo la autorización a un usuario para efectuar una determinada operación sobre un recurso si: * El usuario está específicamente asignado al privilegio correspondiente o, * El usuario tiene una membresía a un objeto de tipo de asignación explícitamente asociado al privilegio o, * El usuario tiene una propiedad que coincide con un tipo de asignación explícitamente asociado al privilegio o * Se ha definido lógica específica