fix: Hinter einem Reverse Proxy zeigte die SSO-Rueckleitung nach innen
Die Adresse, an die der Anmeldedienst zurueckschickt, wurde aus der Anfrage abgeleitet. Hinter einem Proxy ist das die INTERNE – http://10.0.0.5:8071/… –, denn uvicorn lief ohne --proxy-headers. Der Anmeldedienst haette die Rueckleitung abgewiesen, mit einer Meldung, die nicht sagt, woran es liegt. APP_PUBLIC_BASE_URL sagt es ihm jetzt ausdruecklich. Leer bleiben darf sie weiterhin: ohne Proxy und in der Entwicklung genuegt die Anfrage. Die Referenz-Unit bekommt zusaetzlich --proxy-headers. Das hilft neuen Installationen; bestehende ruehrt update.sh nicht an, deshalb ist die Einstellung der verlaessliche Weg. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7690718731
commit
bd2c623136
@@ -38,6 +38,20 @@ class Settings(BaseSettings):
|
||||
# Beim Start die aktuellen EZB-Kurse nachladen (benötigt Internet).
|
||||
ecb_fetch_on_start: bool = True
|
||||
|
||||
# --- Oeffentliche Adresse ------------------------------------------------
|
||||
# Unter welcher Adresse Certain von aussen erreichbar ist, z. B.
|
||||
# https://certain.example.com – OHNE Pfad am Ende.
|
||||
#
|
||||
# Gebraucht fuer die Rueckleit-Adresse der SSO-Anmeldung. Die liesse sich
|
||||
# zwar aus der Anfrage ableiten, aber hinter einem Reverse Proxy kaeme
|
||||
# dabei die INTERNE Adresse heraus (http://10.0.0.5:8071/...), und der
|
||||
# Anmeldedienst weist sie ab – mit einer Fehlermeldung, die nicht sagt,
|
||||
# woran es liegt. Wer sie hier hinschreibt, hat das Problem nicht.
|
||||
#
|
||||
# Leer = aus der Anfrage ableiten. Das genuegt ohne Proxy und in der
|
||||
# Entwicklung.
|
||||
public_base_url: str = ""
|
||||
|
||||
# --- CORS ----------------------------------------------------------------
|
||||
# Leer = kein Cross-Origin (gleiche Herkunft, da FastAPI das SPA selbst
|
||||
# ausliefert). Kommagetrennte Liste oder "*" nur bei Bedarf.
|
||||
|
||||
@@ -47,12 +47,20 @@ def _now() -> datetime:
|
||||
def _redirect_uri(request: Request, provider: str) -> str:
|
||||
"""Die Adresse, an die der Anbieter zurueckschickt.
|
||||
|
||||
Aus der Anfrage abgeleitet, damit Entwicklung (http://localhost:5173) und
|
||||
Betrieb (https://…) ohne zweite Einstellung funktionieren. Sie muss beim
|
||||
Anbieter EXAKT so eingetragen sein – auch beim Einloesen des Codes wird
|
||||
sie noch einmal mitgeschickt und dort verglichen.
|
||||
Sie muss beim Anbieter EXAKT so eingetragen sein – beim Einloesen des Codes
|
||||
wird sie noch einmal mitgeschickt und dort verglichen. Ein Zeichen
|
||||
Unterschied, und die Anmeldung scheitert.
|
||||
|
||||
Steht ``APP_PUBLIC_BASE_URL``, gilt die. Sonst wird sie aus der Anfrage
|
||||
abgeleitet – das genuegt in der Entwicklung, geht hinter einem Reverse
|
||||
Proxy aber schief: Dort kaeme die INTERNE Adresse heraus
|
||||
(http://10.0.0.5:8071/...), weil uvicorn die Weiterleitungs-Kopfzeilen
|
||||
nicht auswertet. Genau deshalb gibt es die Einstellung.
|
||||
"""
|
||||
return str(request.url_for("oidc_callback", provider=provider))
|
||||
pfad = request.url_for("oidc_callback", provider=provider).path
|
||||
basis = get_settings().public_base_url.strip().rstrip("/")
|
||||
return f"{basis}{pfad}" if basis else str(request.url_for(
|
||||
"oidc_callback", provider=provider))
|
||||
|
||||
|
||||
def _fehlerseite(weiter: str, meldung: str) -> RedirectResponse:
|
||||
|
||||
Reference in New Issue
Block a user