Fix des Fehlers des Foldings der Planner Vorschau
This commit is contained in:
@@ -62,6 +62,24 @@ Link an den Kunden geht.
|
||||
|
||||
## 6. Zugriff beschränken: nur du + der Kunde
|
||||
|
||||
> **Wichtige Einschränkung (Stand: getestet):** Das Bunny-Dashboard zeigt in der
|
||||
> Security-Seite der Pull Zone nur die **Basic** Token Authentication (Felder:
|
||||
> "Token authentication", "Token IP validation", "Url token authentication Key").
|
||||
> Diese Basic-Methode signiert immer einen **exakten Pfad** – es gibt dabei
|
||||
> **kein** Path-Prefix-/Wildcard-/Verzeichnis-Token. Ein Token für `/` ist damit
|
||||
> nur für `/` gültig, nicht für `/ferienwohnungen/` oder andere Unterseiten
|
||||
> (führt zu 403 auf allen anderen Seiten). Verzeichnis-weite Tokens gibt es bei
|
||||
> Bunny nur über die separate "Advanced" Token-Methode (HS256, i. d. R. anderer
|
||||
> Tarif/Reiter) – die in diesem Projekt bisher nicht verfügbar/eingerichtet ist.
|
||||
>
|
||||
> **Für die aktuelle Vorschau-Phase deshalb:** Token Authentication ist
|
||||
> deaktiviert. Die `b-cdn.net`-Test-URL ist damit frei erreichbar (kein
|
||||
> Passwortschutz, aber auch nicht in Suchmaschinen o. ä. auffindbar/verlinkt) –
|
||||
> ausreichend für eine kurze, informelle Abstimmung mit dem Kunden. Die
|
||||
> folgenden Abschnitte 6.1–6.3 bleiben als Referenz stehen, falls später doch
|
||||
> ein Advanced-Token-Setup eingerichtet wird oder Bunny die Basic-Methode um
|
||||
> Prefix-Matching erweitert.
|
||||
|
||||
Bunny.net Pull Zones bieten dafür **Token Authentication**: Requests an die
|
||||
Pull Zone werden nur ausgeliefert, wenn die URL einen gültigen, signierten Token
|
||||
enthält. Es gibt keinen klassischen Basic-Auth-Login-Dialog im Browser –
|
||||
@@ -77,14 +95,16 @@ festgelegten Ablaufzeitpunkt gültig ist.
|
||||
diesen Key kennt, kann selbst gültige Links erzeugen.
|
||||
|
||||
Ab jetzt liefert die Pull Zone **nichts mehr aus**, ohne gültigen Token in der
|
||||
URL – das ist der eigentliche Zugriffsschutz.
|
||||
URL – das ist der eigentliche Zugriffsschutz. Mit der Basic-Methode gilt das
|
||||
aber **pro exaktem Pfad** (siehe Hinweis oben) – für mehrere Seiten braucht es
|
||||
entsprechend mehrere Links, siehe 6.2.
|
||||
|
||||
### 6.2 Signierten Link erzeugen
|
||||
### 6.2 Signierten Link je Seite erzeugen
|
||||
|
||||
Ein signierter Link besteht aus einem Hash über `Authentication Key + Pfad +
|
||||
Ablaufzeitpunkt`. Das lässt sich einfach per kleinem Python-Snippet erzeugen,
|
||||
z. B. lokal ausführen, wenn ein neuer Vorschau-Link für den Kunden gebraucht
|
||||
wird:
|
||||
Ablaufzeitpunkt`. Da die Basic-Methode keine Verzeichnis-Tokens kennt, braucht
|
||||
jede Seite ihren eigenen Link. Lokal ausführen, wenn neue Vorschau-Links für
|
||||
den Kunden gebraucht werden:
|
||||
|
||||
```python
|
||||
import hashlib
|
||||
@@ -92,28 +112,44 @@ import base64
|
||||
import time
|
||||
|
||||
security_key = "DEIN_AUTHENTICATION_KEY"
|
||||
url_path = "/index.html" # z.B. Startseite, oder "/" je nach Setup
|
||||
expires = int(time.time()) + 7 * 24 * 60 * 60 # 7 Tage gültig
|
||||
|
||||
hashable = f"{security_key}{url_path}{expires}"
|
||||
token_hash = hashlib.sha256(hashable.encode()).digest()
|
||||
token = base64.urlsafe_b64encode(token_hash).decode().rstrip("=")
|
||||
# Alle Pfade eintragen, die der Kunde ansehen soll:
|
||||
url_paths = [
|
||||
"/",
|
||||
"/ferienwohnungen/",
|
||||
"/ferienwohnungen/fewo1/",
|
||||
"/ferienwohnungen/fewo2/",
|
||||
"/ferienwohnungen/fewo3/",
|
||||
"/preise/",
|
||||
"/ausflugsziele/",
|
||||
"/kontakt/",
|
||||
"/impressum/",
|
||||
"/datenschutz/",
|
||||
]
|
||||
|
||||
print(f"https://iwz-ferienwohnungen.b-cdn.net{url_path}?token={token}&expires={expires}")
|
||||
for url_path in url_paths:
|
||||
hashable = f"{security_key}{url_path}{expires}"
|
||||
token_hash = hashlib.sha256(hashable.encode()).digest()
|
||||
token = base64.urlsafe_b64encode(token_hash).decode().rstrip("=")
|
||||
print(f"https://iwz-ferienwohnungen.b-cdn.net{url_path}?token={token}&expires={expires}")
|
||||
```
|
||||
|
||||
Den ausgegebenen Link schickst du dem Kunden. Läuft die Gültigkeit ab, einfach
|
||||
ein neues Snippet mit neuem `expires`-Wert ausführen und den frischen Link
|
||||
verschicken.
|
||||
Die ausgegebenen Links schickst du dem Kunden (z. B. als Liste). Läuft die
|
||||
Gültigkeit ab, einfach das Snippet mit neuem `expires`-Wert erneut ausführen.
|
||||
|
||||
### 6.3 Praktisch für Vorschau-Zwecke
|
||||
|
||||
- Länge der Gültigkeit (`expires`) nach Bedarf wählen – z. B. 7 Tage für eine
|
||||
kurze Abstimmungsrunde, oder wenige Stunden für einen einzelnen Termin.
|
||||
- Ohne gültigen Token bekommt jeder andere Besucher einen Fehler von Bunny –
|
||||
die Seite ist damit faktisch nur über den geteilten Link erreichbar.
|
||||
- Sobald die Seite live gehen soll (echte Domain, öffentlich), wird Token
|
||||
Authentication in der Pull Zone einfach wieder deaktiviert.
|
||||
die Seite ist damit faktisch nur über die geteilten Links erreichbar.
|
||||
- Da pro Seite ein eigener Token nötig ist, taugt dieser Weg nur für wenige,
|
||||
fest bekannte Seiten – nicht für eine frei navigierbare Vorschau. Für eine
|
||||
frei klickbare Vorschau (aktueller Stand) bleibt Token Authentication
|
||||
vorerst deaktiviert (siehe Hinweis oben).
|
||||
- Sobald die Seite live gehen soll (echte Domain, öffentlich), bleibt Token
|
||||
Authentication in der Pull Zone ohnehin deaktiviert.
|
||||
|
||||
## 7. Domain-Anbindung (später, für den echten Umzug)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user