Authentifizierung
EmDash verwendet Passkey-Authentifizierung als primäre Anmeldemethode. Passkeys sind phishingsicher, benötigen keine Passwörter und funktionieren geräteübergreifend über Ihren Browser oder Passwort-Manager.
Für Cloudflare-Deployments können Sie optional Cloudflare Access als alternativen Authentifizierungsanbieter verwenden.
So funktioniert es
Abschnitt betitelt „So funktioniert es“Passkeys nutzen WebAuthn, einen Webstandard, der Public-Key-Anmeldeinformationen erstellt, die auf Ihrem Gerät gespeichert oder über Ihren Passwort-Manager synchronisiert werden. Bei der Anmeldung beweist Ihr Gerät den Besitz der Anmeldeinformationen, ohne jemals ein Passwort über das Netzwerk zu senden.
Vorteile der Passkey-Authentifizierung:
- Keine Passwörter zum Merken oder Verlieren
- Phishingsicher – Anmeldeinformationen sind an die Domain Ihrer Website gebunden
- Geräteübergreifende Synchronisierung – funktioniert mit iCloud Keychain, Google Password Manager, 1Password usw.
- Schnelle Anmeldung – ein Tippen mit Biometrie oder PIN
Erstmalige Einrichtung
Abschnitt betitelt „Erstmalige Einrichtung“Wenn Sie zum ersten Mal auf das Admin-Oberfläche zugreifen, führt Sie der Einrichtungsassistent durch die Erstellung Ihres Admin-Kontos.
-
Navigieren Sie zu
http://localhost:4321/_emdash/admin -
Sie werden zum Einrichtungsassistenten weitergeleitet. Geben Sie ein:
- Seitentitel – Der Name Ihrer Website
- Tagline – Eine kurze Beschreibung
- Admin-E-Mail – Ihre E-Mail-Adresse
-
Klicken Sie auf Website erstellen, um Ihren Passkey zu registrieren
-
Ihr Browser fordert Sie auf, einen Passkey zu erstellen:
- Auf macOS: Touch ID, Gerätepasswort oder Sicherheitsschlüssel
- Auf Windows: Windows Hello oder Sicherheitsschlüssel
- Auf Mobilgeräten: Face ID, Fingerabdruck oder PIN
-
Sobald Ihr Passkey registriert ist, sind Sie angemeldet und werden zum Admin-Dashboard weitergeleitet.
Anmeldung
Abschnitt betitelt „Anmeldung“Nach der Einrichtung löst der Zugriff auf das Admin-Oberfläche die Passkey-Authentifizierung aus:
-
Besuchen Sie
/_emdash/admin -
Wenn Sie nicht angemeldet sind, sehen Sie die Anmeldeseite
-
Klicken Sie auf Anmelden, um sich zu authentifizieren
-
Ihr Browser fordert Ihren Passkey an (Biometrie, PIN oder Sicherheitsschlüssel)
-
Nach der Verifizierung werden Sie zum Admin-Dashboard weitergeleitet
Fallback mit Magic Link
Abschnitt betitelt „Fallback mit Magic Link“Wenn Sie Ihren Passkey nicht verwenden können (z.B. verlorenes Gerät), bieten Magic-Links eine Alternative. Dies erfordert eine konfigurierte E-Mail.
-
Klicken Sie auf der Anmeldeseite auf Mit E-Mail anmelden
-
Geben Sie Ihre E-Mail-Adresse ein
-
Überprüfen Sie Ihren Posteingang auf einen Anmeldelink
-
Klicken Sie auf den Link, um sich zu authentifizieren (15 Minuten gültig)
OAuth-Anmeldung
Abschnitt betitelt „OAuth-Anmeldung“EmDash unterstützt OAuth-Anmeldung mit GitHub und Google, wenn konfiguriert. Benutzer können ihre Konten nach der anfänglichen Passkey-Einrichtung verknüpfen.
Siehe die Konfigurationsanleitung für Setup-Anweisungen.
Benutzerrollen
Abschnitt betitelt „Benutzerrollen“EmDash verwendet rollenbasierte Zugriffskontrolle mit fünf Stufen:
| Rolle | Stufe | Beschreibung |
|---|---|---|
| Abonnent | 10 | Nur-Lese-Zugriff |
| Mitwirkender | 20 | Inhalte erstellen (benötigt Genehmigung) |
| Autor | 30 | Eigene Inhalte erstellen/bearbeiten/veröffentlichen |
| Redakteur | 40 | Alle Inhalte verwalten |
| Admin | 50 | Vollzugriff inklusive Einstellungen |
Jede Rolle erbt Berechtigungen von allen niedrigeren Stufen. Der erste Benutzer wird immer als Admin erstellt.
Benutzer einladen
Abschnitt betitelt „Benutzer einladen“Admins können neue Benutzer über das Admin-Oberfläche einladen:
-
Gehen Sie zu Einstellungen > Benutzer
-
Klicken Sie auf Benutzer einladen
-
Geben Sie die E-Mail des Benutzers ein und wählen Sie eine Rolle
-
Klicken Sie auf Einladung senden
-
Der Benutzer erhält eine E-Mail mit einem Einladungslink
-
Er klickt auf den Link und registriert seinen Passkey
Einladungen sind 7 Tage gültig. Admins können Einladungen von der Benutzerseite erneut senden oder widerrufen.
Passkeys verwalten
Abschnitt betitelt „Passkeys verwalten“Benutzer können ihre Passkeys in den Kontoeinstellungen verwalten:
- Passkey hinzufügen – Zusätzliche Passkeys für Backup oder andere Geräte registrieren
- Passkey entfernen – Nicht mehr verwendete Passkeys löschen
- Passkey umbenennen – Passkeys beschreibende Namen geben
Jeder Benutzer kann bis zu 10 Passkeys registriert haben.
Selbstregistrierung
Abschnitt betitelt „Selbstregistrierung“Für Team-Websites können Sie die Selbstregistrierung für bestimmte E-Mail-Domains aktivieren:
import { defineConfig } from "astro/config";import emdash from "emdash/astro";
export default defineConfig({ integrations: [ emdash({ auth: { selfSignup: { domains: ["example.com"], defaultRole: "contributor", }, }, }), ],});Benutzer mit passenden E-Mail-Domains können sich ohne Einladung registrieren. Sie erhalten eine Bestätigungs-E-Mail und registrieren einen Passkey, um die Registrierung abzuschließen.
Sitzungskonfiguration
Abschnitt betitelt „Sitzungskonfiguration“Sitzungen verwenden sichere HttpOnly-Cookies mit sinnvollen Standardwerten:
emdash({ auth: { session: { maxAge: 30 * 24 * 60 * 60, // 30 days (default) sliding: true, // Reset expiry on activity }, },});Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“- Passkeys werden als öffentliche Schlüssel gespeichert – der private Schlüssel verlässt nie Ihr Gerät
- Challenge-Verifizierung verhindert Replay-Angriffe
- Ratenbegrenzung schützt vor Brute-Force-Angriffen (5 Versuche/Minute/IP)
- Sitzungen sind HttpOnly, Secure, SameSite=Lax für Cookie-Sicherheit
- Magic-Link-Tokens sind SHA-256-gehasht – Roh-Tokens werden nie gespeichert
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“”Keine Passkeys registriert”
Abschnitt betitelt „”Keine Passkeys registriert”“Wenn Sie diesen Fehler bei der Anmeldung sehen, wurde Ihr Passkey möglicherweise aus Ihrem Passwort-Manager gelöscht. Bitten Sie einen Admin, Ihnen einen Magic-Link oder eine neue Einladung zu senden.
”Passkey-Authentifizierung fehlgeschlagen”
Abschnitt betitelt „”Passkey-Authentifizierung fehlgeschlagen”“Dies bedeutet normalerweise, dass der Passkey für eine andere Domain erstellt wurde. Passkeys sind domaingebunden – ein Passkey für localhost:4321 funktioniert nicht auf example.com. Registrieren Sie einen neuen Passkey für jede Domain.
”Sitzung abgelaufen”
Abschnitt betitelt „”Sitzung abgelaufen”“Sitzungen dauern standardmäßig 30 Tage mit gleitender Ablaufzeit. Wenn Sie unerwartet abgemeldet werden, löschen Sie Ihre Cookies und melden Sie sich erneut an.
Alle Passkeys verloren
Abschnitt betitelt „Alle Passkeys verloren“Wenn Sie den Zugriff auf alle Ihre registrierten Passkeys verloren haben:
- Bitten Sie einen anderen Admin, Ihnen einen Magic-Link zu senden (erfordert E-Mail-Konfiguration)
- Verwenden Sie den Magic-Link, um sich anzumelden
- Registrieren Sie einen neuen Passkey in den Kontoeinstellungen
Wenn Sie der einzige Admin sind und E-Mail nicht konfiguriert ist, müssen Sie die Authentifizierung Ihrer Website über die Datenbank zurücksetzen.
Cloudflare Access
Abschnitt betitelt „Cloudflare Access“Bei der Bereitstellung auf Cloudflare können Sie Cloudflare Access anstelle von Passkeys als Ihren Authentifizierungsanbieter verwenden. Access übernimmt die Authentifizierung am Edge unter Verwendung Ihres bestehenden Identitätsanbieters.
Warum Cloudflare Access verwenden?
Abschnitt betitelt „Warum Cloudflare Access verwenden?“- Single Sign-On — Benutzer authentifizieren sich mit dem IdP Ihres Unternehmens
- Zentralisierte Zugriffskontrolle — Verwalten Sie, wer auf das Admin-Oberfläche im Cloudflare Dashboard zugreifen kann
- Keine Passkey-Verwaltung — Keine Notwendigkeit, Passkeys zu registrieren oder zu verwalten
- Gruppenbasierte Rollen — IdP-Gruppen automatisch auf EmDash-Rollen abbilden
Einrichtung
Abschnitt betitelt „Einrichtung“- Erstellen Sie eine Cloudflare Access-Anwendung für Ihre EmDash-Site
- Notieren Sie den Application Audience Tag (AUD) aus den Anwendungseinstellungen
- Konfigurieren Sie EmDash für die Verwendung von Access:
import { defineConfig } from "astro/config";import cloudflare from "@astrojs/cloudflare";import emdash from "emdash/astro";import { d1, access } from "@emdash-cms/cloudflare";
export default defineConfig({ output: "server", adapter: cloudflare(), integrations: [ emdash({ database: d1({ binding: "DB" }), auth: access({ teamDomain: "myteam.cloudflareaccess.com", audience: "abc123def456...", // From Access app settings }), }), ],});Konfigurationsoptionen
Abschnitt betitelt „Konfigurationsoptionen“| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
teamDomain | string | erforderlich | Ihre Access-Team-Domain (z.B. myteam.cloudflareaccess.com) |
audience | string | erforderlich | Application Audience (AUD) Tag aus den Access-Einstellungen |
autoProvision | boolean | true | EmDash-Benutzer beim ersten Access-Login erstellen |
defaultRole | number | 30 | Rolle für Benutzer, die keiner Gruppe zugeordnet sind (30 = Autor) |
syncRoles | boolean | false | Rolle bei jedem Login basierend auf IdP-Gruppen aktualisieren |
roleMapping | object | — | IdP-Gruppennamen auf Rollenebenen abbilden |
audienceEnvVar | string | "CF_ACCESS_AUDIENCE" | Name der Umgebungsvariable für den Audience-Tag (Alternative zum Hardcoding) |
Rollenzuordnung
Abschnitt betitelt „Rollenzuordnung“Ordnen Sie Ihre IdP-Gruppen EmDash-Rollen zu:
emdash({ auth: access({ teamDomain: "myteam.cloudflareaccess.com", audience: "abc123...", roleMapping: { Admins: 50, // Admin "Content Editors": 40, // Editor Writers: 30, // Author }, defaultRole: 20, // Contributor for users not in any group }),});Die erste passende Gruppe gewinnt, wenn ein Benutzer mehreren Gruppen angehört. Der erste Benutzer, der auf die Site zugreift, wird unabhängig von den Gruppen immer Admin.
Verhalten der Rollensynchronisierung
Abschnitt betitelt „Verhalten der Rollensynchronisierung“Standardmäßig (syncRoles: false) wird die Rolle eines Benutzers beim ersten Login festgelegt und ändert sich danach nicht mehr. Dies ermöglicht es Admins, Rollen in EmDash manuell anzupassen.
Setzen Sie syncRoles: true, wenn Sie möchten, dass IdP-Gruppen maßgeblich sind — die Rolle des Benutzers wird bei jedem Login basierend auf seinen aktuellen Gruppen aktualisiert.
Funktionsweise
Abschnitt betitelt „Funktionsweise“- Benutzer besucht
/_emdash/admin - Cloudflare Access greift ein und leitet zu Ihrem IdP weiter
- Benutzer authentifiziert sich (SSO, MFA, etc.)
- Access setzt ein signiertes JWT in der Anfrage
- EmDash validiert das JWT und erstellt/authentifiziert den Benutzer
Deaktivierte Funktionen
Abschnitt betitelt „Deaktivierte Funktionen“Wenn Access aktiviert ist, sind diese Funktionen nicht verfügbar:
- Login-Seite (
/_emdash/admin/login) - Passkey-Registrierung und -Verwaltung
- OAuth-Login
- Magic-Link-Login
- Self-Signup
- Benutzereinladungen
Die Benutzerverwaltung erfolgt vollständig über Ihre Cloudflare Access-Richtlinien.
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“”No Access JWT present”
Abschnitt betitelt „”No Access JWT present”“Die Anfrage erreichte EmDash ohne ein Access-JWT. Das bedeutet:
- Access ist nicht so konfiguriert, dass es Ihre Anwendung schützt
- Die Access-Richtlinie passt nicht auf die Admin-Routen
Überprüfen Sie, ob Ihre Access-Anwendung /_emdash/admin/* abdeckt.
”JWT audience mismatch”
Abschnitt betitelt „”JWT audience mismatch”“Der audience-Wert in Ihrer Konfiguration stimmt nicht mit dem JWT überein. Überprüfen Sie den Application Audience Tag in Ihren Access-Anwendungseinstellungen.
”User not authorized”
Abschnitt betitelt „”User not authorized”“Der Benutzer hat sich über Access authentifiziert, aber autoProvision ist false und er existiert nicht in EmDash. Entweder:
- Setzen Sie
autoProvision: true, oder - Erstellen Sie den Benutzer manuell, bevor er sich anmeldet