my personal code snippet database

Uncategorized

Keycloak OIDC-Anbindung an Microsoft Entra ID mittels Zertifikat (private_key_jwt)

Bei der OIDC-Anbindung von Keycloak an Microsoft Entra ID kann anstelle eines Client Secrets auch eine JWT-Authentifizierung mittels privatem Schlüssel (private_key_jwt) verwendet werden. Dies gilt als moderne und sicherere Alternative zum Shared Secret.

1. OpenID Connect Identity Provider anlegen

In Keycloak einen neuen Identity Provider vom Typ

OpenID Connect v1.0

anlegen.

Als Discovery-URL die OpenID-Configuration von Microsoft Entra ID hinterlegen:

https://login.microsoftonline.com/<TENANT-ID>/v2.0/.well-known/openid-configuration

Nach dem Import werden die Endpunkte (Authorization, Token, JWKS usw.) automatisch übernommen.


2. RSA-Schlüssellänge konfigurieren

Die Schlüssellänge des automatisch generierten Realm-Signaturschlüssels kann vorab angepasst werden.

Keycloak

Realm Settings
→ Keys
→ Providers
→ rsa-generated

Dort kann beispielsweise die gewünschte RSA-Schlüssellänge (z. B. 3072 oder 4096 Bit) eingestellt werden.

Hinweis: Eine Änderung wirkt sich nur auf neu generierte Schlüssel aus.


3. Öffentliches Zertifikat aus Keycloak exportieren

Das öffentliche X.509-Zertifikat kann über den JWKS-Endpunkt des Realms abgerufen werden.

Beispiel:

https://<keycloak-host>/realms/<realm>/protocol/openid-connect/certs

Im JSON den Eintrag mit

"use": "sig"

auswählen und den Inhalt von

"x5c": [
    "MIIC..."
]

kopieren.


4. PEM-Datei erstellen

Den Inhalt aus x5c in eine neue Datei einfügen und mit PEM-Header und -Footer ergänzen:

-----BEGIN CERTIFICATE-----
MIIC...
-----END CERTIFICATE-----

Die Datei beispielsweise als

keycloak-signing.crt

oder

keycloak-signing.pem

speichern.


5. Zertifikat in Microsoft Entra ID hinterlegen

In der entsprechenden App Registration:

Certificates & secrets
→ Certificates
→ Upload certificate

Die zuvor erzeugte PEM-/CRT-Datei hochladen.


6. Identity Provider konfigurieren

Im OpenID Connect Identity Provider folgende Einstellungen setzen:

Client authentication:
    JWT signed with private key

Client assertion signature algorithm:
    RS256

Add X.509 Headers to the JWT:
    On

Dadurch werden die benötigten Zertifikatsinformationen (x5t/x5c) im JWT-Header mitgesendet, sodass Microsoft Entra ID den verwendeten Schlüssel eindeutig zuordnen kann.


Zusammenfassung

  1. Identity Provider vom Typ OpenID Connect v1.0 anlegen.
  2. Microsoft Discovery URL (.well-known/openid-configuration) hinterlegen.
  3. RSA-Schlüssellänge unter Realm Settings → Keys → Providers → rsa-generated festlegen.
  4. Das öffentliche Zertifikat über den JWKS-Endpunkt (/protocol/openid-connect/certs) abrufen.
  5. Den x5c-Eintrag des use = sig-Schlüssels in eine PEM-Datei verpacken.
  6. Das Zertifikat in der Azure App Registration hochladen.
  7. Als Client Authentication JWT signed with private key sowie RS256 verwenden und Add X.509 Headers to the JWT aktivieren.

Mit dieser Konfiguration kann sich Keycloak gegenüber Microsoft Entra ID mittels OIDC und private_key_jwt authentifizieren, ohne ein Client Secret verwenden zu müssen.