Перейти к основному содержимому

Аутентификация и разрешения

API ChurchApps использует аутентификацию на основе JWT. Пользователи входят в систему для получения токена, который кодирует их идентичность, членство в церкви и разрешения. На этой странице рассматриваются процесс аутентификации, модель разрешений и поддержка OAuth.

Процесс входа

Стандартный вход

POST /membership/users/login

Аутентификация: Публичный

Принимает один из трёх типов учётных данных:

ПолеОписание
email + passwordСтандартный вход по email/паролю
jwtПовторная аутентификация с существующим JWT
authGuidОдноразовая ссылка аутентификации (используется в письмах приветствия/сброса)

Ответ:

{
"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>"
}

Поле token содержит JWT, который следует отправлять как Authorization: Bearer <token> в последующих запросах.

Содержимое токена

JWT кодирует:

  • id — ID пользователя
  • churchId — текущая выбранная церковь
  • personId — запись о человеке для выбранной церкви
  • Массивы разрешений для каждого API

Выбор церкви

Пользователи могут принадлежать нескольким церквям. Ответ на вход включает все церкви с их разрешениями. Для переключения между церквями клиент генерирует новый JWT, ограниченный другой церковью из данных ответа на вход.

Регистрация пользователя

Регистрация нового пользователя

POST /membership/users/register

Аутентификация: Публичный

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

Создаёт пользователя с временным паролем и отправляет приветственное письмо со ссылкой аутентификации. Первый зарегистрированный пользователь на новом экземпляре автоматически получает права администратора сервера.

Регистрация новой церкви

POST /membership/churches/add

Аутентификация: JWT

После регистрации пользователя вызовите этот эндпоинт для создания церкви и привязки к ней пользователя.

Управление паролями

МетодПутьАутентификацияОписание
POST/membership/users/forgotПубличныйОтправить письмо для сброса пароля. Тело: { "userEmail": "...", "appName": "...", "appUrl": "..." }
POST/membership/users/setPasswordGuidПубличныйУстановить новый пароль по GUID аутентификации из письма сброса. Тело: { "authGuid": "...", "newPassword": "..." }
POST/membership/users/updatePasswordJWTИзменить пароль текущего пользователя. Тело: { "newPassword": "..." }

Модель разрешений

Разрешения организованы по модулям и назначаются пользователям через роли. Каждое разрешение имеет тип контента и действие.

Справочник разрешений

РазделТип контентаДействиеОписание
ПосещаемостьAttendanceCheckinРегистрация участников на служениях
AttendanceEditРедактирование записей посещаемости
ServicesEditУправление служениями и временами служений
AttendanceViewПросмотр записей посещаемости
AttendanceView SummaryПросмотр сводок и отчётов по посещаемости
ПожертвованияDonationsEditСоздание и редактирование записей о пожертвованиях
SettingsEditРедактирование настроек пожертвований/платежей
DonationsView SummaryПросмотр сводных отчётов по пожертвованиям
DonationsViewПросмотр отдельных записей о пожертвованиях
Люди и группыFormsAdminПолное администрирование форм
FormsEditРедактирование определений форм
PlansEditРедактирование планов служений
Group MembersEditДобавление/удаление участников групп
GroupsEditСоздание и редактирование групп
HouseholdsEditРедактирование назначений домохозяйств
PeopleEditРедактирование любой записи о человеке
PeopleEdit SelfРедактирование только собственной записи
RolesEditУправление ролями и назначениями пользователей
Group MembersViewПросмотр списков участников групп
PeopleView MembersПросмотр только членов (не посетителей)
PeopleViewПросмотр всех людей
RolesViewПросмотр ролей и назначений
SettingsEditРедактирование настроек церкви
КонтентContentEditРедактирование страниц, разделов, элементов
SettingsEditРедактирование настроек контента
StreamingServicesEditУправление конфигурацией потоковых служб
ChatHostВедение/модерация чат-сессий
СообщенияTextingSendОтправка SMS-сообщений

Как проверяются разрешения

В контроллерах разрешения проверяются методом au.checkAccess():

// Требовать конкретное разрешение
if (!au.checkAccess(Permissions.people.edit)) return this.json({}, 401);

// Или внутри actionWrapper — CRUD-система проверяет автоматически
crudSettings: {
permissions: {
view: Permissions.people.view,
edit: Permissions.people.edit
}
}

Администратор сервера

Разрешение Server.Admin предоставляет полный доступ ко всем церквям. Оно назначается первому зарегистрированному пользователю и может быть предоставлено другим через роль администратора сервера.

OAuth 2.0

API поддерживает OAuth 2.0 для сторонних интеграций. Доступны два типа предоставления.

Поток кода авторизации

  1. Авторизация: POST /membership/oauth/authorize (требуется JWT)

    • Тело: { "client_id": "...", "redirect_uri": "...", "response_type": "code", "scope": "...", "state": "..." }
    • Возвращает: { "code": "...", "state": "..." }
  2. Обмен кода на токен: POST /membership/oauth/token (Публичный)

    • Тело: { "grant_type": "authorization_code", "code": "...", "client_id": "...", "client_secret": "...", "redirect_uri": "..." }
    • Возвращает: { "access_token": "...", "token_type": "Bearer", "expires_in": 43200, "refresh_token": "...", "scope": "..." }
  3. Обновление токена: POST /membership/oauth/token (Публичный)

    • Тело: { "grant_type": "refresh_token", "refresh_token": "...", "client_id": "...", "client_secret": "..." }

Токены доступа истекают через 12 часов.

Поток кода устройства (RFC 8628)

Для устройств без браузера (ТВ-приложения, киоски):

  1. Запрос кода устройства: POST /membership/oauth/device/authorize (Публичный)

    • Тело: { "client_id": "...", "scope": "..." }
    • Возвращает: { "device_code": "...", "user_code": "ABCD-1234", "verification_uri": "https://app.b1.church/device", "expires_in": 900, "interval": 5 }
  2. Пользователь вводит код по URI верификации и одобряет или отклоняет

  3. Опрос токена: POST /membership/oauth/token (Публичный)

    • Тело: { "grant_type": "urn:ietf:params:oauth:grant-type:device_code", "device_code": "...", "client_id": "..." }
    • Возвращает authorization_pending до одобрения, затем возвращает токен доступа

Управление OAuth-клиентами

МетодПутьАутентификацияРазрешениеОписание
GET/membership/oauth/clientsJWTServer.AdminСписок всех OAuth-клиентов
GET/membership/oauth/clients/:idJWTServer.AdminПолучить клиента по ID
GET/membership/oauth/clients/clientId/:clientIdJWTПолучить клиента по client ID (секрет скрыт)
POST/membership/oauth/clientsJWTServer.AdminСоздать или обновить клиента
DELETE/membership/oauth/clients/:idJWTServer.AdminУдалить клиента

Эндпоинты одобрения устройств

МетодПутьАутентификацияОписание
GET/membership/oauth/device/pending/:userCodeJWTПолучить информацию об ожидающем коде устройства для интерфейса одобрения
POST/membership/oauth/device/approveJWTОдобрить авторизацию устройства. Тело: { "user_code": "...", "church_id": "..." }
POST/membership/oauth/device/denyJWTОтклонить авторизацию устройства. Тело: { "user_code": "..." }

Публичные и аутентифицированные эндпоинты

API использует две функции-обёртки, определяющие требования аутентификации:

  • actionWrapper — Требует действительный JWT. Объект аутентифицированного пользователя (au) доступен с churchId, userId и проверками разрешений.
  • actionWrapperAnon — Аутентификация не требуется. Используется для входа, регистрации, публичных поисков контента и приёмников вебхуков.

В таблицах эндпоинтов этой документации они обозначены как JWT и Public соответственно в столбце «Аутентификация».

Связанные страницы