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
+21
View File
@@ -410,3 +410,24 @@ def test_zettel_merkt_sich_das_zu_verknuepfende_konto(db):
assert eingeloest.link_user_id == eva.id
# Eine normale Anmeldung traegt das Feld nicht.
assert oidc_state.einloesen(db, oidc_state.anlegen(db, "authentik").state).link_user_id is None
def test_app_client_darf_eigene_discovery_adresse_haben():
"""In Authentik hat jede Anwendung standardmaessig einen eigenen Issuer.
Web- und App-Client brauchen dort zwei getrennte Anwendungen – ohne eigene
Discovery-Adresse wuerde die iss-Pruefung des App-Tokens fehlschlagen.
"""
umgebung = dict(VOLLE_UMGEBUNG)
umgebung["OIDC_AUTHENTIK_NATIVE_DISCOVERY_URL"] = (
"https://idp.example.com/application/o/vorrania-ios/.well-known/openid-configuration"
)
(p,) = provider_aus_umgebung(umgebung, BASIS)
assert p.app_discovery_url == umgebung["OIDC_AUTHENTIK_NATIVE_DISCOVERY_URL"]
assert p.discovery_url != p.app_discovery_url
def test_ohne_eigene_adresse_teilen_sich_beide_wege_die_discovery():
(p,) = provider_aus_umgebung(VOLLE_UMGEBUNG, BASIS)
assert p.app_discovery_url == p.discovery_url