Abmelden beendet auch die Authentik-Sitzung und springt zurück ins Tool

- Kopfleiste meldet immer über das Portal ab, auch ohne Portal-Sitzung,
  und gibt die aktuelle Seite als returnTo mit.
- Portal merkt sich den Rücksprung über den Umweg zu Authentik.
- Setup-Skript setzt den Abmelde-Ablauf des Providers 'Portal' auf
  default-invalidation-flow (der Provider-Ablauf meldet nur bei der App ab).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kerim AtilganandClaude Opus 5.5 committed 2026-10-26 09:55:42 +01:00
1 parent c674fce196
commit edc64f159a
5 files changed
+59 -8

No files matched your search

+11 -1
View File
@@ -50,6 +50,8 @@ LAUNCH_URLS = {
"datenuebertragungen": "https://data.handy-insel.de/api/auth/oidc/start",
}
LOGOUT_FLOW = "default-invalidation-flow"
SERVICE_ACCOUNT = "hi-portal"
SERVICE_GROUP = "hi-portal-service"
SERVICE_ROLE = "Portal: Apps pro Benutzer lesen"
@@ -133,13 +135,21 @@ def ensure_portal_app(apps):
step("1. OIDC-Provider und App 'Portal'")
template = next(p for p in results("/providers/oauth2/") if p["name"] == "Preisliste")
provider = next((p for p in results("/providers/oauth2/") if p["name"] == "Portal"), None)
# "Abmelden" in Portal und Kopfleiste soll auch die Authentik-Sitzung beenden. Der übliche
# default-provider-invalidation-flow meldet nur bei der App ab, dieser Ablauf auch bei Authentik.
logout_flow = next(f for f in results("/flows/instances/?designation=invalidation") if f["slug"] == LOGOUT_FLOW)
if provider:
print(" = Provider 'Portal' vorhanden")
if provider.get("invalidation_flow") != logout_flow["pk"]:
call("PATCH", f"/providers/oauth2/{provider['pk']}/", {"invalidation_flow": logout_flow["pk"]})
print(f" + Abmelde-Ablauf: {LOGOUT_FLOW} (beendet auch die Authentik-Sitzung)")
else:
print(f" = Abmelde-Ablauf: {LOGOUT_FLOW}")
else:
provider = call("POST", "/providers/oauth2/", {
"name": "Portal",
"authorization_flow": template["authorization_flow"],
"invalidation_flow": template["invalidation_flow"],
"invalidation_flow": logout_flow["pk"],
"client_type": "confidential",
# Neuere Authentik-Versionen setzen per API keine Standard-Grant-Types;
# ohne diese Liste lehnt Authentik jede Anmeldung als "malformed" ab.