15 puntos por baeba 2025-05-13 | Aún no hay comentarios. | Compartir por WhatsApp

Esta serie aborda cómo implementar autenticación (Authentication) y autorización (Authorization) en una arquitectura de microservicios.
Este artículo explica la visión general completa y las diferencias con una aplicación única (monolítica).


Aplicación de ejemplo: RealGuard.io

RealGuard.io es una plataforma de sistemas de seguridad comercial que gestiona el control y las alarmas de los equipos de seguridad.
Los usuarios pertenecen a empresas vendedoras, empresas clientes y proveedores de monitoreo, y cada uno tiene distintos permisos de acceso.


Autenticación y autorización en una arquitectura monolítica

Una estructura monolítica está compuesta por una sola aplicación y una base de datos, y la autenticación se implementa con un token de sesión.
La autorización se realiza con una estructura como la siguiente:

isAllowed(user, operation, resource)  

Ejemplo:

isAllowed(user, "disarm", SecuritySystem(ID))  

4 modelos de autorización

  1. RBAC: control de acceso basado en roles – determina los permisos según los roles asignados al usuario
  2. ReBAC: control de acceso basado en relaciones – determina el acceso según la relación entre el usuario y el recurso
  3. ABAC: control de acceso basado en atributos – determina el acceso según los atributos del usuario, el recurso y el entorno
  4. Modelo híbrido: permite implementar políticas complejas combinando los tres anteriores

Ejemplos de autorización y permisos por rol

Operation Required Role
getAlarmSystem() SecuritySystemViewer
armSystem() SecuritySystemArmer
disarmSystem() SecuritySystemDisarmer
cancelSystem() SecuritySystemAlarmCanceller

Además de un rol específico, también pueden aplicarse condiciones adicionales como restricciones por horario laboral (ABAC) o si está incluido en la lista de notificaciones.


Dónde validar la autorización

  1. Infraestructura de red: se pueden hacer verificaciones simples de permisos en service mesh, ingress controller, etc.
  2. Handlers de la REST API: autorización coarse-grained a nivel de solicitud
  3. Lógica de dominio: autorización basada en condiciones complejas
  4. Capa de acceso a BD: filtrado de autorización dentro de SQL (efectivo para procesar grandes volúmenes)

Autorización en la UI

La UI no puede imponer la autorización, pero puede optimizar la UX mostrando o deshabilitando botones/funciones según los permisos del usuario.


Autenticación en una arquitectura de microservicios

El BFF (Backend For Frontend) se encarga del login y la gestión de sesión.
Como cada microservicio se ejecuta de forma independiente, no puede acceder directamente a la información del usuario desde la sesión, por lo que debe recibirla mediante tokens como JWT.


Autorización en una arquitectura de microservicios

La solicitud se transmite en el orden BFF → SecurityService, y la validación de autorización puede hacerse en estos tres puntos:

  1. BFF: puede hacer autorización a nivel de solicitud según la ruta y el método, con base en la información de sesión
  2. Red entre servicios: el service mesh realiza parte de la autorización basada en JWT
  3. Dentro de cada servicio: la autorización se realiza en la lógica de dominio y la capa de acceso a BD

Dificultades de la autorización distribuida

Como cada servicio no tiene en su propia base de datos toda la información que necesita, puede requerirse llamar a la API de otros servicios para autorizar.
También existe el enfoque de resolverlo con JWT, pero el tamaño del token y el costo de validación se vuelven un problema.


Resumen

  • La autenticación verifica la identidad del usuario, la autorización determina sus permisos
  • El patrón isAllowed(user, operation, resource) es el núcleo de la autorización
  • Se implementa combinando los tres modelos de autorización: RBAC, ReBAC y ABAC
  • En un monolito, la autorización es más sencilla gracias al acceso a una sola base de datos
  • En microservicios, implementarla es más complejo porque los datos necesarios para autorizar están distribuidos

Aún no hay comentarios.

Aún no hay comentarios.