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
- Identity Provider vom Typ OpenID Connect v1.0 anlegen.
- Microsoft Discovery URL (
.well-known/openid-configuration) hinterlegen. - RSA-Schlüssellänge unter Realm Settings → Keys → Providers → rsa-generated festlegen.
- Das öffentliche Zertifikat über den JWKS-Endpunkt (
/protocol/openid-connect/certs) abrufen. - Den
x5c-Eintrag desuse = sig-Schlüssels in eine PEM-Datei verpacken. - Das Zertifikat in der Azure App Registration hochladen.
- 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.