Files
internxt-webdav/docs/browser-token-auth.md
elpatron bbf3b899f7 Restic-Kompatibilität, POST, rekursives MKCOL, findstr /C: Fix
- Server: POST für Uploads, rekursives MKCOL/PUT, ensureFolderExists
- PUT: fehlende Elternordner werden erstellt
- Scripts: findstr /C: für Literalsuche (Punkt-Konflikt behoben)
- Docs: Restic + rclone Hinweis

Made-with: Cursor
2026-02-28 15:18:57 +01:00

145 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Browser-Token-Authentifizierung (Ansatz B)
Da der API-Login für Ihren Account-Typ blockiert ist, können Sie sich im Browser einloggen und die Session-Daten für den WebDAV-Wrapper verwenden.
## Ablauf
1. Auf https://drive.internxt.com einloggen
2. Token und Mnemonic aus dem Browser extrahieren
3. In `.env` eintragen
4. WebDAV-Server starten
## Token extrahieren
### Schritt 1: Alle gespeicherten Keys anzeigen
Auf **https://drive.internxt.com** eingeloggt sein. DevTools (F12) → **Console**:
```javascript
// Alle localStorage-Keys anzeigen
Object.keys(localStorage).filter(k => k.includes('x') || k.includes('token') || k.includes('Token')).forEach(k => console.log(k));
```
Damit sehen Sie, welche Keys es gibt (z.B. `xNewToken`, `xMnemonic`, `xUser`).
### Schritt 2: Token und Mnemonic auslesen
```javascript
// Token und Mnemonic anzeigen
console.log('Token:', localStorage.getItem('xNewToken') || localStorage.getItem('xToken') || '(nicht gefunden)');
console.log('Mnemonic:', localStorage.getItem('xMnemonic') || '(nicht gefunden)');
```
### Schritt 3: Falls nichts gefunden wird
- **Application-Tab prüfen:** DevTools → **Application** (oder **Anwendung**) → links **Local Storage****https://drive.internxt.com** auswählen. Dort alle Einträge durchsehen.
- **Richtige URL:** Sie müssen auf `https://drive.internxt.com` sein (nicht internxt.com) und **eingeloggt** sein nach dem Login auf `/drive` oder `/app`.
- **Session vs. Local:** Manche Werte liegen in `sessionStorage`. Testen mit:
```javascript
console.log('sessionStorage:', Object.keys(sessionStorage));
```
- **Alle Keys anzeigen:** Zum Debuggen alle Keys mit Werten:
```javascript
for (let i = 0; i < localStorage.length; i++) {
const k = localStorage.key(i);
console.log(k + ':', localStorage.getItem(k)?.substring(0, 50) + '...');
}
```
## .env eintragen
```
INXT_TOKEN=eyJhbGciOiJIUzI1NiIs...
INXT_MNEMONIC=word1 word2 word3 ...
# Namensentschlüsselung: CRYPTO_SECRET oder CRYPTO_SECRET2 (CLI-Default: 6KYQBP847D4ATSFA)
CRYPTO_SECRET=6KYQBP847D4ATSFA
# Optional: WebDAV-Credentials erzwingen (sonst beliebige Credentials akzeptiert)
# WEBDAV_USER=backup
# WEBDAV_PASS=geheim
```
## Duplicati Pre-/Post-Scripts (optional)
Falls der WebDAV-Server nicht dauerhaft läuft, kann Duplicati ihn vor dem Backup starten und danach beenden:
| Script | Duplicati-Einstellung | Pfad |
|--------|------------------------|------|
| Start | Vor dem Backup ausführen | `scripts\start-webdav.cmd` |
| Stop | Nach dem Backup ausführen | `scripts\stop-webdav.cmd` |
**Einstellungen → Erweitert → Scripts** jeweils den vollen Pfad eintragen, z.B.:
```
C:\Pfad\zu\internxt-webdav\scripts\start-webdav.cmd
C:\Pfad\zu\internxt-webdav\scripts\stop-webdav.cmd
```
Optional Port als Argument (Standard: 3005):
```
C:\Pfad\zu\internxt-webdav\scripts\start-webdav.cmd 8080
C:\Pfad\zu\internxt-webdav\scripts\stop-webdav.cmd 8080
```
Der Server startet im Hintergrund und ist nach ~5 Sekunden bereit.
## Restic + rclone
```bash
restic -r rclone:internxt-webdav:repo-name init
```
Der Server erstellt fehlende Ordner rekursiv (MKCOL). Bei 500-Fehlern: Server-Log prüfen (`PUT Fehler:`), Token mit `npm run token-refresh` erneuern.
## WebDAV-Credentials (für Duplicati, Explorer)
Der Server erwartet **Basic Auth**. Ohne `WEBDAV_USER`/`WEBDAV_PASS` in `.env` akzeptiert er **beliebige** Credentials Sie können in Duplicati z.B. Benutzername `backup` und Passwort `geheim` eintragen. Mit `WEBDAV_USER` und `WEBDAV_PASS` werden nur diese Credentials akzeptiert.
## WebDAV-Server starten
```bash
npm start
```
Server läuft auf `http://127.0.0.1:3005`. Phase 14 aktiv: PROPFIND, MKCOL, DELETE, MOVE, GET, PUT. Für GET und PUT wird INXT_MNEMONIC benötigt.
### PowerShell Copy-Item: „Null character in path“
Windows/.NET fügt bei WebDAV-Pfaden manchmal Null-Bytes ein. **Workaround:**
```powershell
# Variante 1: Direkt per HTTP (umgeht WebDAV-Bugs, UUID aus dir i: übernehmen)
Invoke-WebRequest -Uri "http://127.0.0.1:3005/_.69942103-e16f-4714-89bb-9f9f7d3b1bd5" -OutFile test.md
# Upload per PUT (PowerShell)
Invoke-WebRequest -Uri "http://127.0.0.1:3005/meine-datei.txt" -Method PUT -Body "Inhalt" -ContentType "application/octet-stream"
# Variante 2: Robocopy (kopiert alle Dateien aus Root)
robocopy "i:\" "." /NFL /NDL
# Variante 3: Explorer Datei per Drag & Drop kopieren
``` Windows Explorer: Netzlaufwerk verbinden → `http://127.0.0.1:3005`.
## Token erneuern (bei 401 / abgelaufen)
Tokens laufen nach einiger Zeit ab (typisch Stunden). Bei 401-Fehlern oder „Nicht autorisiert“:
### Option A: Automatisch (Chromium)
```bash
npm run token-refresh
```
Öffnet einen Browser mit drive.internxt.com. Einloggen die Tokens werden extrahiert und `.env` automatisch aktualisiert. Server neu starten.
### Option B: Manuell
1. **[https://drive.internxt.com](https://drive.internxt.com)** öffnen und erneut einloggen
2. Token und Mnemonic wie oben (Schritt 2) aus der Console auslesen
3. `.env` mit den neuen Werten aktualisieren
4. WebDAV-Server neu starten
## Hinweise
- **Bridge-API**: Der Download nutzt die Internxt Bridge mit `x-api-version: 2` und den Headern `internxt-version`/`internxt-client`. Ohne diese liefert die Bridge 400.
- **Sicherheit**: Mnemonic und Token sind hochsensibel. Nicht in Git committen, `.env` in `.gitignore` belassen.
- **Nur für Sie**: Die Tokens sind an Ihre Session gebunden. Für andere Nutzer funktioniert dieser Ansatz nicht.