Skip to main content
Traducción. Autoritativo: ../../../modules/identity/spec.md.
El realm de member se queda en core (ADR-010, FS-CORE-0009). Un member es un contacto autenticado; un usuario no.

Entidades e invariantes

Eventos emitidos

identity.user.invited|joined|deactivated · identity.role.assigned|revoked · identity.api_key.created|rotated|revoked · identity.oauth.authorized|revoked · identity.impersonation.started|ended · identity.mfa.enabled|disabled

Endpoints

  • Auth: POST /v1/identity/auth/{sign-in,sign-up,sign-out,magic-link,passkey} — público, con rate limit
  • MFA: POST /v1/identity/mfa/{enroll,verify,disable}identity.mfa.*
  • Usuarios y membresías: CRUD /v1/identity/users, /v1/identity/memberships
  • Roles: CRUD /v1/identity/roles, POST /v1/identity/role-assignmentsidentity.roles.*
  • Credenciales de máquina: CRUD /v1/identity/api-keys, /v1/identity/oauth-clients
  • OAuth2 provider: GET /oauth/authorize, POST /oauth/token, POST /oauth/revoke, GET /oauth/userinfo
  • Impersonación: POST /v1/identity/impersonations — solo Ops, identity.impersonation.start

OAuth corre en ambas direcciones

Softcrum es provider OAuth2/OIDC (FS-IDN-0007) para que una herramienta socia actúe por cuenta del tenant y el sitio del tenant ofrezca “Sign in with Softcrum”, y client OAuth2/OIDC (FS-IDN-0008) para que el personal del tenant entre por su propio proveedor de identidad. Ninguna es el default; ambas son configuración, y un tenant puede usar las dos a la vez.

No negociables

Toda restricción de unicidad lleva el tenant. Dos realms, nunca superpuestos. Cada endpoint de la plataforma declara exactamente un permiso de este registro. Las máquinas llevan roles igual que las personas. Ningún módulo lee estas tablas directamente — la capa de API resuelve el contexto de autorización y lo pasa hacia abajo.