accounts
Producto de cuentas financieras. El dominio que guarda y protege la lógica de negocio.
Architecture / field notes
Una arquitectura de microservicios donde un producto de cuentas puede llegar a muchos canales, sin perder la propiedad de sus reglas.
01 / Proposito
Este proyecto es un boceto para representar cómo una organización puede construir productos independientes como microservicios y exponerlos a distintos canales de consumo.
Producto de cuentas financieras. El dominio que guarda y protege la lógica de negocio.
Canal operativo que permite administrar cuentas y transacciones.
Canal informativo que consulta cuentas, saldos y movimientos, y ejecuta simulaciones únicamente en el cliente.
Los canales no contienen la lógica principal del producto. Consumen las APIs de los microservicios y presentan la información de acuerdo con las necesidades de cada experiencia.
02 / Componentes
auth es un microservicio externo de autenticación. Tiene sus propias entidades, persistencia y reglas internas para:
GET /me./me recibe un encabezado Authorization: Bearer <token> y retorna la identidad necesaria para que otros servicios conozcan quién realiza la petición. Auth no necesita conocer las reglas específicas de cuentas, transacciones o cualquier otro producto. Su responsabilidad es autenticar y entregar una identidad confiable.accounts es un microservicio de producto. Contiene la lógica de negocio relacionada con:
Antes de ejecutar los métodos de cuentas, su middleware extrae el Bearer token y consulta el endpoint /me de auth. La respuesta se agrega al request como req.user. A partir de ese momento, accounts aplica su autorización internamente, verificando que la cuenta pertenezca al providerId del usuario autenticado. Esta decisión se toma dentro del servicio y no dentro de ningún canal.
Canal de administración que consume accounts para crear, consultar, actualizar y eliminar cuentas; y crear, consultar y actualizar transacciones. Envía el token recibido durante el login en cada petición protegida. No decide si una cuenta pertenece al usuario: esa validación corresponde a accounts.
Canal de consulta que consume accounts para consultar cuentas y transacciones, calcular saldos y métricas para presentación, y ejecutar simulaciones locales de intereses y proyecciones. Las proyecciones son informativas, se calculan en el navegador y no crean ni modifican datos en accounts.
03 / Flujo de una petición protegida
El token funciona como credencial de transporte. La autorización de los recursos no se delega al canal: accounts consulta la identidad y determina internamente qué puede hacer ese usuario.
04 / Identidad y autorización
id
Identificador interno
Identificador de un usuario dentro del servicio auth.
providerId
Identidad de origen
Identificador del usuario en el proveedor de identidad o sistema externo que originó esa identidad.
El servicio accounts utiliza el providerId como referencia de propiedad de sus cuentas. Tanto portalnet como sitecorp, una aplicación móvil o un futuro canal de terceros deben enviar la misma identidad autenticada; la regla de acceso siempre se aplica en accounts.
Este enfoque evita que un canal pueda decidir o falsificar el propietario de un recurso. El cliente no debe enviar un providerId confiable en el body para crear o consultar una cuenta. El servicio lo obtiene del usuario autenticado y lo aplica internamente.
05 / Estado actual del boceto
Para facilitar la demostración, actualmente los servicios viven dentro de un mismo monorepo:
apps/ auth/ accounts/ portalnet/ sitecorp/
También se utiliza la misma base de datos física para el ejemplo. Cada servicio utiliza un prefijo diferente en sus tablas:
auth_tablas de authaccounts_tablas de accountsEsto permite ejecutar el boceto con una infraestructura pequeña y observar las relaciones entre los componentes, pero no debe interpretarse como el diseño final de una plataforma de microservicios.
06 / Evolución hacia microservicios reales
{{ item }}
En ese escenario, auth no compartiría tablas con accounts. Accounts solo conocería el contrato de identidad expuesto por Auth y mantendría sus propias cuentas y transacciones en una base de datos independiente. El prefijo de tablas usado en este repositorio es únicamente una aproximación didáctica para simular separación dentro de una misma base de datos.
07 / Seguridad
La centralización no significa que Auth deba decidir todos los permisos. Auth autentica y entrega la identidad; accounts autoriza sus propios recursos usando esa identidad. Esta separación mantiene responsabilidades claras y evita acoplar las reglas de cuentas a un canal.
08 / Escalabilidad
09 / Idea central
Canal de consumo
API del producto (accounts)
Base de datos propia del producto
Servicio de identidad (auth)
Identidad autenticada
Los canales consumen productos. Los productos protegen sus propios recursos. Auth centraliza la autenticación. Cada microservicio conserva la responsabilidad de autorizar sus datos utilizando únicamente la identidad confiable proporcionada por el sistema de autenticación.