3.6 KiB
CalDAV-Kalender Einrichtung
Übersicht
Die App bietet einen CalDAV-Endpunkt, um Buchungen in externe Kalender-Apps zu synchronisieren. Aus Sicherheitsgründen erfolgt die Authentifizierung per Header. Unterstützt werden:
- Authorization: Bearer
- Basic Auth, wobei der Token als Benutzername übergeben wird (Passwort leer/optional)
Token generieren
- Als Admin einloggen
- Im Admin-Bereich den CalDAV-Token generieren
- Token und URL werden angezeigt
Wichtig: Der Token ist 24 Stunden gültig. Danach muss ein neuer Token generiert werden.
Endpunkt
GET /caldav/calendar/events.ics
Authorization: Bearer <TOKEN>
oder
Authorization: Basic <base64(token:)> # Token als Benutzername, Passwort leer
Unterstützte Kalender-Apps
✅ Thunderbird (empfohlen)
- Kalender → Neuer Kalender → Im Netzwerk
- Format: CalDAV
- Standort: CalDAV-URL eingeben
- Benutzername: Den generierten Token eingeben (Basic Auth)
- Passwort: Leer lassen
✅ Outlook (mit Einschränkungen)
- Datei → Kontoeinstellungen → Internetkalender
- URL eingeben
- Erweiterte Einstellungen → Benutzerdefinierte Header:
Authorization: Bearer <TOKEN>
Hinweis: Nicht alle Outlook-Versionen unterstützen benutzerdefinierte Header.
⚠️ Apple Calendar (eingeschränkt)
Apple Calendar unterstützt keine Authorization-Header für Kalenderabonnements.
Alternativen:
- Manuelle ICS-Datei importieren (nicht automatisch aktualisiert)
- CalDAV-Bridge verwenden (z.B. über Proxy)
⚠️ Google Calendar (eingeschränkt)
Google Calendar unterstützt keine Authorization-Header für URL-Abonnements.
Alternativen:
- Google Apps Script als Bridge verwenden
- Manuelle ICS-Datei importieren
Testen mit cURL
# Bearer
curl -H "Authorization: Bearer <DEIN_TOKEN>" \
https://deine-domain.de/caldav/calendar/events.ics
# Basic (Token als Benutzername, Passwort leer)
curl -H "Authorization: Basic $(printf "%s" "<DEIN_TOKEN>:" | base64)" \
https://deine-domain.de/caldav/calendar/events.ics
Erwartete Antwort: ICS-Datei mit allen bestätigten und ausstehenden Buchungen.
Sicherheit
Warum Authorization-Header?
- Query-Parameter (
?token=...
) werden in Browser-History, Server-Logs und Referrer-Headers gespeichert - Authorization-Header werden nicht geloggt und nicht in der URL sichtbar
- Folgt REST-API Best Practices
Token-Verwaltung
- Token sind 24 Stunden gültig
- Abgelaufene Token werden automatisch beim nächsten Zugriff gelöscht
- Bei Bedarf neuen Token generieren (alte Token werden nicht automatisch invalidiert)
Backward Compatibility
Die alte Methode mit Query-Parameter (?token=...
) wird noch unterstützt, aber als deprecated markiert. Der Server sendet zusätzlich Response-Header (Deprecation: true
und Warning: 299 ...
). Eine Warnung wird im Server-Log ausgegeben.
Troubleshooting
"Unauthorized - Token required"
- Prüfe, ob der Authorization-Header korrekt gesetzt ist
- Format:
Authorization: Bearer <TOKEN>
(mit Leerzeichen nach "Bearer")
"Unauthorized - Invalid or expired token"
- Token ist abgelaufen (24h Gültigkeit)
- Generiere einen neuen Token im Admin-Bereich
Kalender zeigt keine Termine
- Prüfe, ob Buchungen mit Status "confirmed" oder "pending" existieren
- Teste den Endpunkt mit cURL
- Prüfe Server-Logs auf Fehler
Zukünftige Verbesserungen
- Langlebige Token mit Refresh-Mechanismus
- Token-Revocation-Endpoint
- CalDAV-Bridge für Apple Calendar und Google Calendar
- Webhook-basierte Push-Notifications statt Polling