fix(oidc): Nonce-Pruefung selbst kontrollieren statt Authlib zu ueberlassen

Authlib wertet "Aufrufer hat eine Nonce uebergeben, das Token traegt keine"
als Mismatch. Das ist fuer den erneuerten Token der mobilen Clients falsch:
ein per Refresh-Token geholtes ID-Token laesst die nonce-Claim regulaer weg,
womit der Hintergrund-Refresh immer an einem 401 gescheitert waere.

Die Nonce wird daher nicht mehr an Authlib durchgereicht, sondern hier
geprueft: vorhandene Nonce muss passen, und der Browser-Flow verlangt sie
zusaetzlich zwingend (require_nonce) — dort erzeugen wir sie selbst, also
muss der Provider sie zurueckspiegeln. Signatur und uebrige Claims bleiben
unveraendert bei Authlib.

Zwei Tests dazu: erneuertes Token ohne Nonce wird angenommen, Browser-Flow
ohne Nonce abgelehnt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-09 18:33:19 +02:00
co-authored by Claude Opus 5
parent 07235fd4c9
commit b560ee260c
3 changed files with 41 additions and 2 deletions
+2
View File
@@ -208,6 +208,8 @@ def oidc_callback(provider_key: str, request: Request,
provider, tokens["id_token"],
expected_audience=provider.client_id,
nonce=payload.get("n"),
# We generated this nonce; the provider must echo it back.
require_nonce=True,
access_token=tokens.get("access_token"),
)
if not claims.get("email"):