Keycloak und dynamische Redirect URIs
Diese Dokumentation beschreibt folgendes Szenario
Interne Benutzer
-
rufen das BPC über die Adresse
bpc.intern.de
auf -
können
*.extern.de
nicht erreichen
Externe Benutzer
-
rufen das BPC über die Adresse
bpc.extern.de
auf -
können
*.intern.de
nicht erreichen
Der Keycloak ist je nach Benutzer unter keycloak.intern.de
oder keycloak.extern.de
aufrufbar.
Nach dem Anmelden muss jeder Benutzer auf seine Adresse umgeleitet werden, weil sie die jeweils andere nicht erreichen können.
Lösung
Die vorhandenen Optionen post_authentication_redirect_uri
und post_logout_redirect_uri
können Alternativ anstatt eines Strings ein Array als Wert erhalten.
Dieser enthält Werte-Paare, bestehend aus einem regulären Ausdruck ('pattern') und einer URI.
Die Abfrage der Identity Provider Metadaten erfolgt im Normalfall über die Einstellung IdentityProvider_URL
(ID authentication_uri
).
Da diese Einstellung keine multiplen Werte zulässt, muss ein zusätzlicher Parameter metadata_discovery_uri
in die Konfiguration aufgenommen werden.
Dieser wird dann stattdessen verwendet und folgt dem obigen Aufbau mit den Werte-Paaren, bestehend aus einem regulären Ausdruck ('pattern') und einer URI.
Wenn ein Benutzer den Authentifizierungsprozess durchläuft, dann wird die jeweilige URL (z.B. https://bpc.intern.de/
) nacheinander gegen die Regulären Ausdrücke validiert und der erste Treffer entscheidet dann über den konkreten Wert.
Beispielhafte Konfiguration:
{
"client_id": "bpc-core",
"scope": "openid profile email address phone bpc-rollen roles",
"claim_name_roles": "bpc_client_roles,bpc_realm_roles",
"client_secret": "8687ab26-830f-47ed-8ed1-6e62192ccd9c",
"keycloak": {
"realm": "bpc",
"adminclient_realm": "master",
"adminclient_client_id": "admin-cli",
"adminclient_server_url": "https://bpc.intern.de/auth",
"adminclient_username": "admin",
"adminclient_password": "******"
},
"post_authentication_redirect_uri": [
{
"pattern": ".*extern.*",
"uri": "https://bpc.extern.de"
},
{
"pattern": ".*intern.*",
"uri": "https://bpc.intern.de"
}
],
"post_logout_redirect_uri": [
{
"pattern": ".*extern.*",
"uri": "https://bpc.extern.de"
},
{
"pattern": ".*intern.*",
"uri": "https://bpc.intern.de"
}
],
"metadata_discovery_uri": [
{
"pattern": ".*extern.*",
"uri": "https://keycloak.extern.de/auth/realms/bpc/.well-known/openid-configuration"
},
{
"pattern": ".*intern.*",
"uri": "https://keycloak.intern.de/auth/realms/bpc/.well-known/openid-configuration"
}
]
}