App-Client darf eine eigene Anwendung beim Anmeldedienst sein

In Authentik hat jede Anwendung standardmaessig ihren eigenen Issuer, abgeleitet
aus dem Application-Slug. Web- und App-Client brauchen dort aber zwei getrennte
Anwendungen, weil ein Provider entweder vertraulich ODER oeffentlich ist.

Bisher wurde das App-Token gegen den Issuer und den Schluesselsatz der
Web-Anwendung geprueft - die App-Anmeldung waere damit an der iss-Pruefung
gescheitert. Discovery und JWKS werden jetzt je Adresse gepuffert statt je
Anbieter, und OIDC_<KUERZEL>_NATIVE_DISCOVERY_URL benennt die Anwendung des
App-Clients. Ohne die Variable bleibt es bei einer gemeinsamen Adresse.

Ausserdem im README: der Signing Key muss gesetzt sein, sonst signiert Authentik
mit HS256 und das Token wird abgelehnt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-09 22:00:37 +02:00
co-authored by Claude Opus 5
parent 3d0ff54bf5
commit 31b3624cc7
7 changed files with 91 additions and 26 deletions
+5 -1
View File
@@ -76,7 +76,8 @@ def anbieter_auflisten() -> list[OidcProviderOut]:
OidcProviderOut(
slug=p.slug,
display_name=p.display_name,
discovery_url=p.discovery_url,
# Die App prueft gegen ihre eigene Anwendung beim Anbieter.
discovery_url=p.app_discovery_url,
native_client_id=p.native_client_ids[0] if p.native_client_ids else None,
native_redirect_uri=p.native_redirect_uri,
scopes=p.native_scopes,
@@ -227,6 +228,9 @@ def anmeldung_app(slug: str, payload: OidcNativeLogin, db: Session = Depends(get
# eingereicht wird.
nonce=payload.nonce,
erlaubte_audiences=provider.native_client_ids,
# Eigener Issuer und Schluesselsatz, falls der App-Client beim
# Anbieter eine getrennte Anwendung ist (bei Authentik der Normalfall).
discovery_url=provider.app_discovery_url,
)
nutzer = dienst.benutzer_aus_claims(db, provider, claims)
except dienst.OidcFehler as fehler: