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"
    }
  ]
}

Keywords: