Saltar al contenido principal

Autenticación y Permisos

La API de ChurchApps utiliza autenticación basada en JWT. Los usuarios inician sesión para recibir un token que codifica su identidad, membresía en la iglesia y permisos. Esta página cubre el flujo de autenticación, el modelo de permisos y el soporte de OAuth.

Flujo de Inicio de Sesión​

Inicio de Sesión Estándar​

POST /membership/users/login

Autenticación: Público

Acepta uno de tres tipos de credenciales:

CampoDescripción
email + passwordInicio de sesión estándar por correo electrónico/contraseña
jwtRe-autenticarse con un JWT existente
authGuidEnlace de autenticación de una sola vez (utilizado en correos de bienvenida/reinicio)

Respuesta:

{
"user": {
"id": "abc-123",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com"
},
"churches": [
{
"church": { "id": "church-1", "name": "First Church", "subDomain": "firstchurch" },
"person": { "id": "person-1", "membershipStatus": "Member" },
"groups": [{ "id": "group-1", "name": "Choir", "leader": false }],
"apis": [
{
"keyName": "MembershipApi",
"permissions": [
{ "contentType": "People", "action": "View" },
{ "contentType": "People", "action": "Edit" }
]
}
]
}
],
"token": "<jwt-token>"
}

El campo token es un JWT que debe enviarse como Authorization: Bearer <token> en solicitudes posteriores.

Contenido del Token​

El JWT codifica:

  • id — ID de usuario
  • churchId — Iglesia actualmente seleccionada
  • personId — Registro de persona para la iglesia seleccionada
  • Matrices de permisos por API

Selección de Iglesia​

Los usuarios pueden pertenecer a múltiples iglesias. La respuesta de inicio de sesión incluye todas las iglesias con sus permisos. Para cambiar de iglesias, el cliente genera un nuevo JWT delimitado a una iglesia diferente de los datos de la respuesta de inicio de sesión.

Registro de Usuario​

Registrar un Nuevo Usuario​

POST /membership/users/register

Autenticación: Público

{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Doe",
"appName": "B1 Admin",
"appUrl": "https://app.b1.church"
}

Crea un usuario con una contraseña temporal y envía un correo de bienvenida con un enlace de autenticación. El primer usuario registrado en una nueva instancia recibe automáticamente acceso de administrador del servidor.

Registrar una Nueva Iglesia​

POST /membership/churches/add

Autenticación: JWT

Después de registrar un usuario, llame a este punto de conexión para crear una iglesia y asociar el usuario con ella.

Gestión de Contraseñas​

MétodoRutaAutenticaciónDescripción
POST/membership/users/forgotPúblicoEnviar correo de reinicio de contraseña. Cuerpo: { "userEmail": "...", "appName": "...", "appUrl": "..." }
POST/membership/users/setPasswordGuidPúblicoEstablecer una nueva contraseña usando un GUID de autenticación de un correo de reinicio. Cuerpo: { "authGuid": "...", "newPassword": "..." }
POST/membership/users/updatePasswordJWTCambiar la contraseña del usuario actual. Cuerpo: { "newPassword": "..." }

Modelo de Permisos​

Los permisos se organizan por módulo y se asignan a los usuarios a través de roles. Cada permiso tiene un tipo de contenido y una acción.

Referencia de Permisos​

Sección de VisualizaciónTipo de ContenidoAcciónDescripción
AsistenciaAsistenciaCheckinRegistrar la asistencia de miembros en servicios
AsistenciaEditarEditar registros de asistencia
ServiciosEditarGestionar servicios y horarios de servicio
AsistenciaVerVer registros de asistencia
AsistenciaVer ResumenVer resúmenes de asistencia e informes
DonacionesDonacionesEditarCrear y editar registros de donación
ConfiguraciónEditarEditar configuración de donaciones/pagos
DonacionesVer ResumenVer informes de resumen de donaciones
DonacionesVerVer registros de donaciones individuales
Personas y GruposFormulariosAdminAdministración completa de formularios
FormulariosEditarEditar definiciones de formularios
PlanesEditarEditar planes de servicio
Miembros del GrupoEditarAgregar/eliminar miembros del grupo
GruposEditarCrear y editar grupos
HogaresEditarEditar asignaciones de hogares
PersonasEditarEditar cualquier registro de persona
PersonasEditar Uno MismoEditar solo su propio registro de persona
RolesEditarGestionar roles y asignaciones de usuarios
Miembros del GrupoVerVer listas de miembros del grupo
PersonasVer MiembrosVer solo miembros (no visitantes)
PersonasVerVer todas las personas
RolesVerVer roles y asignaciones
ConfiguraciónEditarEditar configuración de la iglesia
ContenidoContenidoEditarEditar páginas, secciones, elementos
ConfiguraciónEditarEditar configuración de contenido
Servicios en DirectoEditarGestionar configuración de servicio en directo
ChatHostAlojar/moderar sesiones de chat
MensajeríaSMSEnviarEnviar mensajes de texto SMS

Cómo se Verifican los Permisos​

En los controladores, los permisos se verifican usando el método au.checkAccess():

// Requerir permiso específico
if (!au.checkAccess(Permissions.people.edit)) return this.json({}, 401);

// O dentro de actionWrapper — el sistema CRUD verifica automáticamente
crudSettings: {
permissions: {
view: Permissions.people.view,
edit: Permissions.people.edit
}
}

Administrador del Servidor​

El permiso Server.Admin otorga acceso completo en todas las iglesias. Se asigna al primer usuario registrado y se puede otorgar a otros a través del rol de administrador del servidor.

OAuth 2.0​

La API admite OAuth 2.0 para integraciones de terceros. Dos tipos de otorgamiento están disponibles.

Flujo del Código de Autorización​

  1. Autorizar: POST /membership/oauth/authorize (se requiere JWT)

    • Cuerpo: { "client_id": "...", "redirect_uri": "...", "response_type": "code", "scope": "...", "state": "..." }
    • Devuelve: { "code": "...", "state": "..." }
  2. Cambiar código por token: POST /membership/oauth/token (Público)

    • Cuerpo: { "grant_type": "authorization_code", "code": "...", "client_id": "...", "client_secret": "...", "redirect_uri": "..." }
    • Devuelve: { "access_token": "...", "token_type": "Bearer", "expires_in": 43200, "refresh_token": "...", "scope": "..." }
  3. Actualizar token: POST /membership/oauth/token (Público)

    • Cuerpo: { "grant_type": "refresh_token", "refresh_token": "...", "client_id": "...", "client_secret": "..." }

Los tokens de acceso caducan después de 12 horas.

Flujo de Código de Dispositivo (RFC 8628)​

Para dispositivos sin navegador (aplicaciones de TV, quioscos):

  1. Solicitar código de dispositivo: POST /membership/oauth/device/authorize (Público)

    • Cuerpo: { "client_id": "...", "scope": "..." }
    • Devuelve: { "device_code": "...", "user_code": "ABCD-1234", "verification_uri": "https://app.b1.church/device", "expires_in": 900, "interval": 5 }
  2. El usuario ingresa el código en el URI de verificación y aprueba o deniega

  3. Sondear el token: POST /membership/oauth/token (Público)

    • Cuerpo: { "grant_type": "urn:ietf:params:oauth:grant-type:device_code", "device_code": "...", "client_id": "..." }
    • Devuelve authorization_pending hasta que se apruebe, luego devuelve el token de acceso

Gestión de Cliente OAuth​

MétodoRutaAutenticaciónPermisoDescripción
GET/membership/oauth/clientsJWTServer.AdminListar todos los clientes OAuth
GET/membership/oauth/clients/:idJWTServer.AdminObtener cliente por ID
GET/membership/oauth/clients/clientId/:clientIdJWT—Obtener cliente por ID de cliente (secreto omitido)
POST/membership/oauth/clientsJWTServer.AdminCrear o actualizar un cliente
DELETE/membership/oauth/clients/:idJWTServer.AdminEliminar un cliente

Puntos de Conexión de Aprobación de Dispositivos​

MétodoRutaAutenticaciónDescripción
GET/membership/oauth/device/pending/:userCodeJWTObtener información de código de dispositivo pendiente para la interfaz de usuario de aprobación
POST/membership/oauth/device/approveJWTAprobar una autorización de dispositivo. Cuerpo: { "user_code": "...", "church_id": "..." }
POST/membership/oauth/device/denyJWTDenegar una autorización de dispositivo. Cuerpo: { "user_code": "..." }

Puntos de Conexión Públicos vs Autenticados​

La API utiliza dos funciones de envoltura que determinan los requisitos de autenticación:

  • actionWrapper -- Requiere un JWT válido. El objeto de usuario autenticado (au) está disponible con churchId, userId y verificaciones de permisos.
  • actionWrapperAnon -- Sin autenticación requerida. Se utiliza para inicio de sesión, registro, búsquedas de contenido público y receptores de webhooks.

En las tablas de puntos de conexión en toda esta documentación, estos se indican como JWT y Público respectivamente en la columna Autenticación.

Páginas Relacionadas​