Skip to main content
Estado: Propuesto · Refs: D4, DEC-D5, standards/security.md
Traducción. Autoritativo: ../../adr/adr-010-member-identity.md.

Contexto

Los clientes finales (members) son una población distinta de los usuarios de consola; Softcrum debe ser la autoridad de identidad (D4) mientras las integraciones embebidas o headless conservan su propia experiencia de login.

Decisión

Los members viven en un realm de Better Auth SEPARADO (tablas y configuración propias; cero superposición de sesión o token con el realm organizacional). Modos de entrada: (a) OTP o magic link nativo vía Resend; (b) token exchange: el backend del tenant firma una aserción JWT con una llave por tenant (external_id, ≤5 min, jti de un solo uso) → POST /v1/core/auth/token-exchange → token de member de Softcrum (scopes: member:read, member:redeem, member:referral). Todo member autenticado mapea 1:1 a una fila de core.contacts.

Consecuencias

  • Softcrum sigue siendo la autoridad; los contactos siempre existen; los terceros conservan su UX.
  • No hay camino de escalamiento de privilegios member→usuario, por construcción. − Dos realms de auth que operar; se requiere herramienta de rotación de llaves de token exchange.