# CORS-Test für Passkey Cross-Device Authentication

## Test-Datei verwenden

1. **Öffne die Test-Seite:**
   ```
   https://harheimertc.tsschulz.de/test-cors.html
   ```

2. **Führe die Tests aus:**
   - Klicke auf "Test OPTIONS Request" - sollte Status 204 zurückgeben
   - Klicke auf "Test POST Request" - sollte Status 200 zurückgeben
   - Klicke auf "Test /api/auth/register-passkey-options" - sollte Options zurückgeben

3. **Prüfe die Browser-Entwicklertools:**
   - Öffne F12 → Network Tab
   - Führe die Tests aus
   - Klicke auf jeden Request und prüfe die **Response Headers**:
     - `Access-Control-Allow-Origin` sollte `https://harheimertc.tsschulz.de` sein
     - `Access-Control-Allow-Credentials` sollte `true` sein
     - `Access-Control-Allow-Methods` sollte `GET, POST, OPTIONS` enthalten

## Manueller Test mit curl

### OPTIONS Preflight Test:
```bash
curl -X OPTIONS \
  -H "Origin: https://harheimertc.tsschulz.de" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: Content-Type" \
  -v \
  https://harheimertc.tsschulz.de/api/auth/register-passkey-options
```

**Erwartete Response:**
- Status: 204 No Content
- Header: `Access-Control-Allow-Origin: https://harheimertc.tsschulz.de`
- Header: `Access-Control-Allow-Credentials: true`

### POST Request Test:
```bash
curl -X POST \
  -H "Origin: https://harheimertc.tsschulz.de" \
  -H "Content-Type: application/json" \
  -d '{"name":"Test","email":"test@example.com"}' \
  -v \
  https://harheimertc.tsschulz.de/api/auth/register-passkey-options
```

**Erwartete Response:**
- Status: 200 OK
- Header: `Access-Control-Allow-Origin: https://harheimertc.tsschulz.de`
- Body: JSON mit `success: true` und `options` Objekt

## Browser Console Test

Öffne die Browser-Konsole (F12) und führe aus:

```javascript
// Test 1: OPTIONS Preflight
fetch('https://harheimertc.tsschulz.de/api/auth/register-passkey-options', {
  method: 'OPTIONS',
  headers: {
    'Origin': window.location.origin,
    'Access-Control-Request-Method': 'POST',
    'Access-Control-Request-Headers': 'Content-Type'
  }
}).then(r => {
  console.log('OPTIONS Status:', r.status);
  console.log('CORS Headers:', {
    origin: r.headers.get('Access-Control-Allow-Origin'),
    credentials: r.headers.get('Access-Control-Allow-Credentials'),
    methods: r.headers.get('Access-Control-Allow-Methods')
  });
});

// Test 2: POST Request
fetch('https://harheimertc.tsschulz.de/api/auth/register-passkey-options', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Origin': window.location.origin
  },
  body: JSON.stringify({
    name: 'Test User',
    email: 'test@example.com'
  })
}).then(r => r.json()).then(data => {
  console.log('POST Response:', data);
  console.log('Has Options:', !!data.options);
  console.log('Has Challenge:', !!data.options?.challenge);
});
```

## Was zu prüfen ist:

1. **OPTIONS Request:**
   - Status sollte 204 sein (nicht 200 oder 404)
   - CORS-Header müssen vorhanden sein

2. **POST Request:**
   - Status sollte 200 sein
   - CORS-Header müssen vorhanden sein
   - Response sollte `success: true` und `options` enthalten

3. **Cross-Device Problem:**
   - Wenn CORS korrekt ist, aber Cross-Device trotzdem nicht funktioniert:
     - Prüfe, ob der QR-Code die richtige Origin enthält
     - Prüfe, ob das Smartphone die gleiche Origin erreichen kann
     - Prüfe die Browser-Logs auf dem Smartphone (falls möglich)

## Häufige Probleme:

1. **Apache überschreibt CORS-Header:**
   - Lösung: In Apache-Config sicherstellen, dass CORS-Header nicht überschrieben werden

2. **OPTIONS gibt 404 zurück:**
   - Lösung: Endpoint muss OPTIONS-Requests explizit behandeln

3. **CORS-Header fehlen:**
   - Lösung: Server-Endpoint muss CORS-Header setzen

4. **Origin-Mismatch:**
   - Lösung: `WEBAUTHN_ORIGIN` muss exakt mit der Browser-Origin übereinstimmen
