Authentifizierung
Unseenr nutzt verschiedene Authentifizierungsmethoden für verschiedene Kontexte.
Dashboard-Authentifizierung
GitHub OAuth
Die primäre Authentifizierungsmethode. Nutzer melden sich mit ihrem GitHub-Account an. Unseenr nutzt die better-auth Bibliothek für Session-Management.
Email / Passwort
Als Fallback verfügbar. Passwort-Anforderungen:
- Mindestens 12 Zeichen
- Serverseitig mit Zod validiert
Zwei-Faktor-Authentifizierung (2FA)
TOTP-basierte Zwei-Faktor-Authentifizierung ist für alle Accounts verfügbar. Wenn aktiviert:
- Nutzer müssen beim Login einen 6-stelligen Code aus ihrer Authenticator-App eingeben
- Backup-Codes werden zur Wiederherstellung bereitgestellt
- 2FA kann in den Account-Einstellungen aktiviert/deaktiviert werden
Sessions
- Sessions nutzen sichere Tokens mit Ablaufdatum
- IP-Adresse und User-Agent werden zur Sicherheit geloggt
- Sessions können in den Account-Einstellungen verwaltet (angesehen und widerrufen) werden
SDK / Ingest-Authentifizierung
SDK-Anfragen an den Ingest-Endpoint nutzen DSN-basierte Authentifizierung. Die DSN enthält einen Public Key, der das Projekt identifiziert:
https://<PUBLIC_KEY>@app.unseenr.io/<PROJECT_ID>
Der Public Key wird gesendet über:
x-unseenr-authHeaderx-sentry-authHeader (Sentry-Kompatibilität)sentry_keyQuery-Parameter
Public Keys können sicher in clientseitigem Code eingebunden werden. Sie erlauben nur das Senden von Events an ein bestimmtes Projekt, nicht das Lesen von Daten.
Client Keys
Jedes Projekt hat einen oder mehrere Client Keys, jeder mit:
- Einem einzigartigen Public Key
- Einer einzigartigen DSN
- Einem optionalen Umgebungsnamen
- Aktiv/Inaktiv-Status
Inaktive Keys werden auf der Ingest-Ebene abgelehnt. Key-Rotation (neu erstellen + alten widerrufen) wird unterstützt.
Interne Worker API
Der Worker kommuniziert mit der Haupt-App über eine interne API, die durch ein Shared Secret (WORKER_API_SECRET) gesichert ist. Dies wird von den Uptime-API-Workern in entfernten Regionen (HEL1, ASH) genutzt, die keinen direkten Datenbankzugriff haben.
Security-Header
Alle authentifizierten Seiten enthalten:
| Header | Wert |
|---|---|
X-Content-Type-Options |
nosniff |
X-Frame-Options |
DENY |
X-XSS-Protection |
1; mode=block |
Referrer-Policy |
strict-origin-when-cross-origin |
Strict-Transport-Security |
max-age=63072000; includeSubDomains; preload |
Content-Security-Policy |
Restriktive Policy (keine externen Scripts) |
Permissions-Policy |
Kamera, Mikrofon, Geolocation deaktiviert |