Eine Identität für alles mit Keycloak

Keycloak ist eine Open-Source-Software, die Red Hat als Implementierung von OpenID Connect veröffentlicht hat. Entwickler können sie einfach und flexibel zur Authentisierung für eigene Applikationen verwenden.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Eine Identität für alles mit Keycloak
Lesezeit: 13 Min.
Von
  • David Klassen
Inhaltsverzeichnis

Die Anforderungen an Internetdienste haben sich in den letzten Jahren stark verändert. Die Zeiten, in denen Nutzer sich für jeden Dienst neu registrierten, sind längst vorbei. Stattdessen möchten man heute seine Identität einmalig bei Anbietern wie Google oder Facebook verwalten und neuen Diensten lediglich Zugriff auf diese Identität gewähren. Die praktische Umsetzung des Zugriffs erfolgt durch den Klick auf einen Google- oder Facebook-Log-in-Button innerhalb des Dienstes. Dieses Vorgehen hat einige Vorteile: Unter anderem vereinfacht das Zentralisieren des kompletten Authentifizierungsprozesses auf einen einzigen Identity Provider das Single-Sign-On. Allerdings potenziert sich der Schaden, falls ein Benutzerkonto erfolgreich in den Händen von Angreifern landet.

Dank des 2014 veröffentlichten OpenID-Connect-Protokolls und Keycloak von Red Hat als zertifizierte Implementierung des Protokolls lässt sich das Anmeldeverfahren verhältnismäßig einfach und schnell in eigenen Systemlandschaften umsetzen. Die Macher von Keycloak haben sich mit ihrer Software zum Ziel gesetzt, das Thema Security für Entwickler von Applikationen und Services deutlich zu vereinfachen. Dabei übernimmt die Software nicht nur die reine Autorisierung, sondern kümmert sich zusätzlich auch um die Authentisierung der Benutzer. Administratoren müssen diese bei der Installation von Keycloak in eine bestehende Infrastruktur nicht neu anlegen, sondern können sie einfach aus gegebenenfalls bestehenden LDAP- beziehungsweise Active-Directory-Servern verwenden.

Keycloak ist im Wesentlichen ein vorkonfigurierter Wildfly Application Server, der separat von den abzusichernden Anwendungen läuft. Abbildung 1 zeigt, wie die Anwendungen beziehungsweise der Client die Benutzer zur Anmeldung an Keycloak weiterleitet, das die Credentials entgegennimmt und weiterverarbeitet. Das Vorgehen isoliert die Anwendung von den zu schützenden Anmeldeinformationen der Benutzer. Das reduziert nicht nur potenzielle Sicherheitslücken bei der Verarbeitung und Weiterleitung sensibler Credentials, sondern bietet zudem die Möglichkeit, eigene Benutzer in fremden Applikationen über eine zentrale Keycloak-Instanz zu authentifizieren. Der Vorteil dabei ist, dass man diese fremden Applikationen anbinden kann, ohne damit die eigentlichen Credentials beziehungsweise Informationen der eigenen Benutzer preisgeben zu müssen.

Der Client reicht die Nutzerdaten zur Authentifizierung an Keycloak weiter. Die Anwendung erhält nach erfolgreicher Authentifizierung das Access- & ID-Token (Abb. 1).

Hinsichtlich der Art der Authentifizierung ist Keycloak sehr flexibel. Unter anderem lassen sich Benutzer innerhalb von Keycloak gegen ein Active Directory oder einen LDAP-Server authentifizieren. Optional lässt sich Keycloak als Kerberos Bridge einsetzen, um Benutzer, die sich beispielsweise durch das Windows-Log-in bereits an einem Kerberos-Server angemeldet haben, automatisch zu authentifizieren. Ebenso ist der Einsatz von Keycloak als Identity Broker möglich, der die Authentifizierung an einen externen Identity Provider beziehungsweise an ein soziales Netz wie Facebook, Google oder GitHub delegiert. Im einfachsten Fall verwenden Administratoren die mitgelieferte Datenbank und legen die Benutzer über eine Administrationsoberfläche neu an oder überlassen ihnen die Registrierung.

Nach der erfolgreichen Authentifizierung eines Benutzers stellt Keycloak neben einem Access Token ein Identity Token in Form eines JSON Web Token (JWT) für den Benutzer an die jeweilige Anwendung aus (vgl. Schritt 4 in Abb. 1). Das Access-Token befähigt die Anwendung dazu, im Namen des Benutzers Dienste aufzurufen. Das Identity Token enthält dagegen vor allem Informationen über die Identität des Benutzers. Es stellt den wesentlichen Unterschied zwischen OAuth 2.0 und dessen Erweiterung OpenID Connect dar: Anders als im klassischen OAuth-2.0-Protokoll berücksichtigt es nicht nur die Rechte in Form von Access-Tokens, sondern zusätzlich die Identität der Nutzer. Über das Identity Token können Anwendungen direkt Informationen wie den kompletten Namen oder die E-Mail der Nutzer auslesen. Bei Bedarf lassen sich dem Identity Token über Keycloak zusätzlich eigene Attribute hinzufügen.

Da mehrere Anwendungen (Clients) an eine Keycloak-Instanz angeschlossen sind, sind die Benutzer nach der Anmeldung automatisch an allen verbundenen Clients angemeldet und müssen sich somit nicht mehr für jede weitere Applikation einzeln anmelden. Aus Anwendersicht verbessert sich somit die Usability der Anwendungen. Für Betreiber vereinfacht das Verfahren die Benutzerverwaltung deutlich, da sie deren Rechte und Rollen nicht mehrfach pflegen und verwalten müssen.