Devkron Basic Web Layer (BWL)

Habilita un modelo coherente de acceso a los recursos del sitio Web.

Se basa en el Resourse Access Authorization Model (RAAM) de Induxsoft

Componentes

  • Proveedor de identidades (IDP). Verifica la validez de un identificador (token) de sesión y recupera información del usuario.
  • API de Operaciones del Sistema de Archivos (FSO API). Proporciona un mecanismo para gestionar privilegios y metadatos, así como realizar operaciones sobre los archivos y carpetas del sitio Web.
  • Controlador de autorizaciones (auth.dk). Autoriza el acceso a los recursos y reúne información de sesión apoyándose en el IDP y la API de FSO.

Flujo de autorización

Aprovechando el modelo del flujo de la solicitud HTTP de Devkron, el programa auth.dk provisto en la BWL agrega el miembro session al objeto @http_context con información del usuario y el recurso solicitado.

auth.dk cargará el programa del IDP que deberá agregar al miembro session el campo user si es posible recuperar un token de sesión válido.

De manera predeterminada, auth.dk buscará el programa del IDP en /_protected/idp/default.dk

Luego, auth.dk con el apoyo de FSO recuperará información del archivo o carpeta indicada (por el URI) y la pondrá a disposición a través del campo resource de session

Si no hay un token de sesión disponible en la solicitud o éste no es válido, no existirá el campo user en session.

Si el token recibido ha podido comprobarse, además del miembro user en session, se agregará el campo authforuser al miembro resource de session con la lista de privilegios del recurso que han podido verificarse que tiene disponibles el usuario sobre el recurso.

El siguiente bloque en JSON ilustra el contenido del objeto @http_context con el miembro session anexado:

{
  "request":{...},
  "response":{...},
  "session": {
        "user": {
            "ids": "ce59246a401441af8d1735bbb2764ec6",
            "uid": "C248E9BAF92411E5AA35C04A000418D7",
            "name": "ADMIN",
            "multifactor": 0,
            "verified_email": 0,
            "verified_mobile": 1,
            "memberships": {
                "workspaces": [
                    "0f251c4fa95c4a579ed1c2f8e75e1a4c"
                ],
                "teams": [
                    "87b65838ecde4ce4b88c5328d27ad4e5"
                ],
                "roles": [
                    "a200c6efd6654d7d91c545400e9f4267"
                ]
            }
        },
        "resource": {
            "type": "folder",
            "fullpath": "/",
            "path": null,
            "name": "",
            "creation": "2022-04-01T06:06:03",
            "lastaccess": "2022-04-16T08:56:17",
            "lastwrite": "2022-04-16T08:56:17",
            "privileges": {
                "admin": [
                    {
                        "user": "C248E9BAF92411E5AA35C04A000418D7"
                    }
                ]
            },
            "priv_inherited": 0,
            "authforuser": [
                "admin"
            ]
        }
    }
}

Acerca de los 4 Privilegios básicos

BWL prevé la existencia de 4 privilegios básicos:

  • read - Solo lectura, este es el único privilegio que NO DEBE establecer explícitamente para que se permita al servidor responder contenido sin requerir autenticación.
  • write - Escritura
  • plus - Propósito general, usualmente empleado para elevar a otro privilegio, por ejemplo read+plus sería "casi" equivalente a write
  • admin - Administrador del sistema (sin restricciones).

auth.dk únicamente verifica el privilegio 'read', la validación de los demás corre a cargo de la API FSO o se deja bajo la responsabilidad de otras capas de aplicación.

Por convención impuesta por la BWL y compatibilidad, si se definen privilegios adicionales para operaciones específicas, debe proporcionarse un Mapa de resolución de privilegios para poder resolver siempre cualquier privilegio personalizado definido por capas superiores en términos de los 4 privilegios básicos. Un ejemplo es FSO API que define privilegios propios, pero también a la función dklfso.authOp que contiene la lógica del mapa de resolución de privilegios.