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:
co-authored by
Claude Opus 5
parent
3d0ff54bf5
commit
31b3624cc7
@@ -55,6 +55,12 @@ class OidcProvider:
|
||||
display_name: str
|
||||
discovery_url: str
|
||||
client_id: str
|
||||
# Eigene Discovery-Adresse fuer den App-Client. In Authentik hat jede
|
||||
# Anwendung standardmaessig einen EIGENEN Issuer (aus ihrem Slug) – und
|
||||
# Web- und App-Client brauchen dort zwei getrennte Anwendungen. Ohne diese
|
||||
# Angabe schluege die iss-Pruefung des App-Tokens fehl. Leer = dieselbe
|
||||
# Adresse wie fuer den Browser-Weg.
|
||||
native_discovery_url: str = ""
|
||||
# Nur der vertrauliche Web-Client hat ein Secret. Die App ist ein oeffentlicher
|
||||
# Client und sendet nie eins – deshalb steht es hier auch nur fuer den Web-Weg.
|
||||
client_secret: str = ""
|
||||
@@ -71,6 +77,11 @@ class OidcProvider:
|
||||
# eines fremden Vorrania-Kontos.
|
||||
require_verified_email: bool = True
|
||||
|
||||
@property
|
||||
def app_discovery_url(self) -> str:
|
||||
"""Discovery-Adresse, gegen die ein Token aus der App geprueft wird."""
|
||||
return self.native_discovery_url or self.discovery_url
|
||||
|
||||
@property
|
||||
def erlaubte_audiences(self) -> tuple[str, ...]:
|
||||
"""Alle aud-Werte, die ein ID-Token dieses Anbieters tragen darf."""
|
||||
@@ -131,6 +142,7 @@ def provider_aus_umgebung(
|
||||
)
|
||||
continue
|
||||
|
||||
native_discovery = (env.get(p + "NATIVE_DISCOVERY_URL") or "").strip()
|
||||
redirect = (env.get(p + "REDIRECT_URI") or "").strip()
|
||||
if not redirect:
|
||||
if not basis:
|
||||
@@ -159,6 +171,7 @@ def provider_aus_umgebung(
|
||||
slug=slug,
|
||||
display_name=(env.get(p + "DISPLAY_NAME") or "").strip() or slug.capitalize(),
|
||||
discovery_url=discovery,
|
||||
native_discovery_url=native_discovery,
|
||||
client_id=client_id,
|
||||
client_secret=(env.get(p + "CLIENT_SECRET") or "").strip(),
|
||||
scopes=scopes,
|
||||
|
||||
Reference in New Issue
Block a user