> ## Documentation Index
> Fetch the complete documentation index at: https://internal.softcrum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ADR-010 — Identidad de member: realm de Better Auth separado + token exchange

> 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 UX de login.

Estado: Propuesto · Refs: D4, DEC-D5, standards/security.md

> Traducción. Autoritativo: [`../../adr/adr-010-member-identity.md`](/adr/adr-010-member-identity).

## 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.
