feat(DIRECTUS-SETUP.md): add UUID auth for user login
This commit is contained in:
@@ -14,6 +14,10 @@ Komplette Anleitung zur Einrichtung von Directus als Backend für die dgray Klei
|
|||||||
4. [Flows (Automatisierungen)](#4-flows-automatisierungen)
|
4. [Flows (Automatisierungen)](#4-flows-automatisierungen)
|
||||||
5. [Einstellungen](#5-einstellungen)
|
5. [Einstellungen](#5-einstellungen)
|
||||||
6. [Frontend-Integration](#6-frontend-integration)
|
6. [Frontend-Integration](#6-frontend-integration)
|
||||||
|
7. [Initiale Daten](#7-initiale-daten)
|
||||||
|
8. [Checkliste](#8-checkliste)
|
||||||
|
9. [Anonyme Authentifizierung (UUID-basiert)](#9-anonyme-authentifizierung-uuid-basiert)
|
||||||
|
10. [Sicherheitshinweise](#10-sicherheitshinweise)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -778,10 +782,106 @@ if (directus.isAuthenticated()) {
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. Sicherheitshinweise
|
## 9. Anonyme Authentifizierung (UUID-basiert)
|
||||||
|
|
||||||
|
Für maximale Privatsphäre nutzt dgray.io ein UUID-basiertes Login-System ohne echte E-Mail-Adressen.
|
||||||
|
|
||||||
|
### 9.1 Konzept
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ User klickt "Account erstellen" │
|
||||||
|
│ ↓ │
|
||||||
|
│ Client generiert UUID v4: │
|
||||||
|
│ f47ac10b-58cc-4372-a567-0e02b2c3d479 │
|
||||||
|
│ ↓ │
|
||||||
|
│ Directus erhält: │
|
||||||
|
│ • E-Mail: f47ac10b-58cc-4372-a567-0e02b2c3d479@dgray.io │
|
||||||
|
│ • Passwort: f47ac10b-58cc-4372-a567-0e02b2c3d479 │
|
||||||
|
│ ↓ │
|
||||||
|
│ User speichert UUID → fertig │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.2 Vorteile
|
||||||
|
|
||||||
|
| Aspekt | Beschreibung |
|
||||||
|
|--------|--------------|
|
||||||
|
| **Privatsphäre** | Keine echten E-Mail-Adressen, keine persönlichen Daten |
|
||||||
|
| **Einfachheit** | User merkt sich nur eine UUID |
|
||||||
|
| **Sicherheit** | 122 bit Entropie, Argon2-Hashing durch Directus |
|
||||||
|
| **Anonymität** | Kein Bezug zur Identität möglich |
|
||||||
|
|
||||||
|
### 9.3 Tradeoffs
|
||||||
|
|
||||||
|
| Pro | Contra |
|
||||||
|
|-----|--------|
|
||||||
|
| Keine echten Daten nötig | UUID verloren = Account verloren |
|
||||||
|
| Nicht rückverfolgbar | Kein Passwort-Reset möglich |
|
||||||
|
| Simples UX (1 Secret) | User muss UUID sicher aufbewahren |
|
||||||
|
|
||||||
|
### 9.4 Frontend-Implementation
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Account erstellen
|
||||||
|
async function createAnonymousAccount() {
|
||||||
|
const uuid = crypto.randomUUID();
|
||||||
|
const email = `${uuid}@dgray.io`;
|
||||||
|
const password = uuid;
|
||||||
|
|
||||||
|
// Bei Directus registrieren
|
||||||
|
await directus.register(email, password);
|
||||||
|
|
||||||
|
// UUID dem User anzeigen zum Speichern
|
||||||
|
showUuidToUser(uuid);
|
||||||
|
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Login
|
||||||
|
async function login(uuid) {
|
||||||
|
const email = `${uuid}@dgray.io`;
|
||||||
|
await directus.login(email, uuid);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.5 UX-Flow
|
||||||
|
|
||||||
|
1. **Registrierung:**
|
||||||
|
- User klickt "Account erstellen"
|
||||||
|
- System generiert UUID, zeigt sie prominent an
|
||||||
|
- User kopiert UUID (Button "Kopieren")
|
||||||
|
- Hinweis: "Speichere diese ID sicher - sie ist dein einziger Zugang!"
|
||||||
|
|
||||||
|
2. **Login:**
|
||||||
|
- User gibt UUID ein (ein Feld)
|
||||||
|
- System baut E-Mail + Passwort daraus
|
||||||
|
- Fertig
|
||||||
|
|
||||||
|
3. **Recovery:**
|
||||||
|
- Nicht möglich (by design)
|
||||||
|
- Optional: QR-Code zum Offline-Speichern anbieten
|
||||||
|
|
||||||
|
### 9.6 Directus-Konfiguration
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Public Registration erlauben
|
||||||
|
PUBLIC_REGISTRATION=true
|
||||||
|
|
||||||
|
# Keine E-Mail-Verifizierung (fake E-Mails)
|
||||||
|
AUTH_EMAIL_VERIFY=false
|
||||||
|
|
||||||
|
# Kein Passwort-Reset (nicht möglich mit fake E-Mails)
|
||||||
|
AUTH_PASSWORD_RESET=false
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Sicherheitshinweise
|
||||||
|
|
||||||
1. **Monero-Adressen** werden nur dem Listing-Ersteller und authentifizierten Nutzern angezeigt
|
1. **Monero-Adressen** werden nur dem Listing-Ersteller und authentifizierten Nutzern angezeigt
|
||||||
2. **Keine echten E-Mails** in Public-Responses - nur über Chat-System
|
2. **Keine echten E-Mails** - UUID-basierte Authentifizierung
|
||||||
3. **Rate Limiting** für API-Endpunkte aktivieren
|
3. **Rate Limiting** für API-Endpunkte aktivieren
|
||||||
4. **Bilder-Upload** auf max. 10MB und erlaubte Typen beschränken
|
4. **Bilder-Upload** auf max. 10MB und erlaubte Typen beschränken
|
||||||
5. **XSS-Schutz** für WYSIWYG-Felder in Directus aktivieren
|
5. **XSS-Schutz** für WYSIWYG-Felder in Directus aktivieren
|
||||||
|
6. **UUID-Warnung** bei Registrierung: User muss UUID sicher speichern
|
||||||
|
|||||||
Reference in New Issue
Block a user