Zum Hauptinhalt springen

Authentifizierung & Berechtigungen

Die ChurchApps API nutzt JWT-basierte Authentifizierung. Benutzer melden sich an, um einen Token zu erhalten, der ihre Identität, Kirchenmitgliedschaft und Berechtigungen kodiert. Diese Seite behandelt den Auth-Flow, das Berechtigungsmodell und OAuth-Support.

Login-Flow

Standard-Login

POST /membership/users/login

Auth: Öffentlich

Akzeptiert einen von drei Anmeldedatentypen:

FeldBeschreibung
email + passwordStandard-E-Mail/Passwort-Login
jwtNeu-Authentifizierung mit bestehendem JWT
authGuidEinmaliger Auth-Link (verwendet in Willkommens-/Reset-E-Mails)

Antwort:

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

Das token-Feld ist ein JWT, das als Authorization: Bearer <token> in nachfolgenden Anfragen gesendet werden sollte.

Token-Inhalt

Das JWT kodiert:

  • id — Benutzer-ID
  • churchId — Derzeit ausgewählte Kirche
  • personId — Person-Datensatz für die ausgewählte Kirche
  • Pro-API-Berechtigungsarrays

Kirchenauswahl

Benutzer können mehreren Kirchen angehören. Die Login-Antwort enthält alle Kirchen mit ihren Berechtigungen. Um Kirchen zu wechseln, generiert der Client ein neues JWT, das auf eine andere Kirche aus den Login-Antwortdaten begrenzt ist.

Benutzerregistrierung

Neuen Benutzer registrieren

POST /membership/users/register

Auth: Öffentlich

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

Erstellt einen Benutzer mit temporärem Passwort und sendet eine Willkommens-E-Mail mit einem Auth-Link. Der erste registrierte Benutzer auf einer neuen Instanz erhält automatisch Server-Admin-Zugriff.

Neue Kirche registrieren

POST /membership/churches/add

Auth: JWT

Nach Registrierung eines Benutzers rufen Sie diesen Endpoint auf, um eine Kirche zu erstellen und den Benutzer mit ihr zu verknüpfen.

Passwortverwaltung

MethodePfadAuthBeschreibung
POST/membership/users/forgotÖffentlichPassword-Reset-E-Mail senden. Body: { "userEmail": "...", "appName": "...", "appUrl": "..." }
POST/membership/users/setPasswordGuidÖffentlichNeues Passwort mit Auth-GUID aus Reset-E-Mail setzen. Body: { "authGuid": "...", "newPassword": "..." }
POST/membership/users/updatePasswordJWTPasswort des aktuellen Benutzers ändern. Body: { "newPassword": "..." }

Berechtigungsmodell

Berechtigungen werden nach Modul organisiert und Benutzern durch Rollen zugewiesen. Jede Berechtigung hat einen Content-Type und eine Aktion.

Berechtigungsreferenz

AnzeigeabschnittContent-TypeAktionBeschreibung
AnwesenheitAttendanceCheckinMitglieder bei Services einchecken
AttendanceEditBesuchsdaten bearbeiten
ServicesEditServices und Servicezeiten verwalten
AttendanceViewBesuchsdaten anzeigen
AttendanceView SummaryAnwesenheitszusammenfassungen und Berichte anzeigen
SpendenDonationsEditSpendendatensätze erstellen und bearbeiten
SettingsEditSpendeneinstellungen bearbeiten
DonationsView SummarySpendenzusammenfassungsberichte anzeigen
DonationsViewIndividuelle Spendendatensätze anzeigen
Personen und GruppenFormsAdminVollständige Formularverwaltung
FormsEditFormulardefinitionen bearbeiten
PlansEditServicepläne bearbeiten
Group MembersEditGruppenmitglieder hinzufügen/entfernen
GroupsEditGruppen erstellen und bearbeiten
HouseholdsEditHaushaltzuweisungen bearbeiten
PeopleEditBeliebigen Personendatensatz bearbeiten
PeopleEdit SelfNur eigenen Personendatensatz bearbeiten
RolesEditRollen und Benutzerzuweisungen verwalten
Group MembersViewGruppenmitgliederlisten anzeigen
PeopleView MembersNur Mitglieder anzeigen (nicht Besucher)
PeopleViewAlle Personen anzeigen
RolesViewRollen und Zuweisungen anzeigen
SettingsEditKircheneinstellungen bearbeiten
ContentContentEditSeiten, Abschnitte, Elemente bearbeiten
SettingsEditContent-Einstellungen bearbeiten
StreamingServicesEditStreaming-Service-Konfiguration verwalten
ChatHostChat-Sessions hosten/moderieren
MessagingTextingSendSMS-Nachrichten senden

Wie Berechtigungen überprüft werden

In Controllern werden Berechtigungen mit der au.checkAccess()-Methode überprüft:

// Spezifische Berechtigung erforderlich
if (!au.checkAccess(Permissions.people.edit)) return this.json({}, 401);

// Oder innerhalb von actionWrapper — das CRUD-System prüft automatisch
crudSettings: {
permissions: {
view: Permissions.people.view,
edit: Permissions.people.edit
}
}

Server-Admin

Die Server.Admin-Berechtigung gewährt vollständigen Zugriff über alle Kirchen hinweg. Dies wird dem ersten registrierten Benutzer zugewiesen und kann anderen über die Server-Admin-Rolle gewährt werden.

OAuth 2.0

Die API unterstützt OAuth 2.0 für Drittanwendungsintegrationen. Zwei Grant-Typen sind verfügbar.

Authorization Code Flow

  1. Autorisieren: POST /membership/oauth/authorize (JWT erforderlich)

    • Body: { "client_id": "...", "redirect_uri": "...", "response_type": "code", "scope": "...", "state": "..." }
    • Rückgabe: { "code": "...", "state": "..." }
  2. Code gegen Token tauschen: POST /membership/oauth/token (Öffentlich)

    • Body: { "grant_type": "authorization_code", "code": "...", "client_id": "...", "client_secret": "...", "redirect_uri": "..." }
    • Rückgabe: { "access_token": "...", "token_type": "Bearer", "expires_in": 43200, "refresh_token": "...", "scope": "..." }
  3. Token aktualisieren: POST /membership/oauth/token (Öffentlich)

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

Zugriffstokens verfallen nach 12 Stunden.

Device Code Flow (RFC 8628)

Für Geräte ohne Browser (TV-Apps, Kiosks):

  1. Device-Code anfordern: POST /membership/oauth/device/authorize (Öffentlich)

    • Body: { "client_id": "...", "scope": "..." }
    • Rückgabe: { "device_code": "...", "user_code": "ABCD-1234", "verification_uri": "https://app.b1.church/device", "expires_in": 900, "interval": 5 }
  2. Benutzer gibt den Code unter der Verification-URI ein und genehmigt oder lehnt ab

  3. Token abfragen: POST /membership/oauth/token (Öffentlich)

    • Body: { "grant_type": "urn:ietf:params:oauth:grant-type:device_code", "device_code": "...", "client_id": "..." }
    • Gibt authorization_pending zurück, bis genehmigt, dann gibt den Zugriffstoken zurück

OAuth-Client-Verwaltung

MethodePfadAuthBerechtigungBeschreibung
GET/membership/oauth/clientsJWTServer.AdminAlle OAuth-Clients auflisten
GET/membership/oauth/clients/:idJWTServer.AdminClient nach ID abrufen
GET/membership/oauth/clients/clientId/:clientIdJWTClient nach Client-ID abrufen (Geheimnis reduziert)
POST/membership/oauth/clientsJWTServer.AdminClient erstellen oder aktualisieren
DELETE/membership/oauth/clients/:idJWTServer.AdminClient löschen

Device-Genehmigungspunkte

MethodePfadAuthBeschreibung
GET/membership/oauth/device/pending/:userCodeJWTInfo zu ausstehender Device-Code für Genehmigungs-UI abrufen
POST/membership/oauth/device/approveJWTDevice-Autorisierung genehmigen. Body: { "user_code": "...", "church_id": "..." }
POST/membership/oauth/device/denyJWTDevice-Autorisierung ablehnen. Body: { "user_code": "..." }

Öffentlich vs. Authentifizierte Endpoints

Die API nutzt zwei Wrapper-Funktionen, die Authentifizierungsanforderungen bestimmen:

  • actionWrapper — Benötigt ein gültiges JWT. Das authentifizierte Benutzerobjekt (au) ist mit churchId, userId und Berechtigungsprüfungen verfügbar.
  • actionWrapperAnon — Keine Authentifizierung erforderlich. Verwendet für Login, Registrierung, öffentliche Content-Lookups und Webhook-Receiver.

In den Endpoint-Tabellen in dieser Dokumentation werden diese als JWT und Öffentlich in der Auth-Spalte angezeigt.

Verwandte Seiten

  • Modulstruktur — Wie Controller, Repositories und Modelle organisiert sind
  • Lokales Setup — API lokal für Entwicklung ausführen