Fullstack-IAM Teil 1: Keycloak Authentifizierung für Webservices und Clients
Im ersten Teil dieser Blogreihe, wird aufgezeigt, wie sich eine Keycloak Instanz in Docker bereitstellen lässt. Im den nächsten Teilen folgen die Integration eines Resource Servers (Spring Boot) und einer Client App (Angular).
Notwendiges Wissen
Technische Voraussetzungen
Motivation
„Wir können das Rad nicht neu erfinden. Wir können nur noch ein wenig daran drehen.“
– Margot S. Baumann
Das Zitat lässt sich gut auf die Benutzerverwaltung in Anwendungen anwenden. Die Anwendung kann noch so trivial sein, oft wird trotzdem eine Authentifizierungsmöglichkeit benötigt. An der Stelle wird es kompliziert. Entwickler müssen sich mit komplexen Vorgehensweisen und Algorithmen auseinander setzen, um eine Anwendung im Internet sicher zu gestalten.
In der Vergangenheit wurden dann häufig eigene Lösungen für die Authentifizierung und die Benutzerverwaltung entwickelt. Doch eins haben diese Lösungen gemeinsam, sie verfolgen eigentlich immer dasselbe Ziel. Deshalb würde es doch Sinn machen, die Benutzerverwaltung zu standardisieren und immer wieder einzusetzen?
An dieser Stelle kann Keycloak ins Spiel kommen…
Bereitstellung von Keycloak mit Datenbank
Keycloak bietet einige Möglichkeiten eine laufende Instanz bereitzustellen. Für eine Übersicht kann hier geklickt werden.
Als Freund von containerisierten Lösungen, möchte ich das Beispiel Keycloak mit eigener Datenbank in Docker Compose vorstellen.
Erstellung der Bereitstellungsdatei docker-compose.yml
Start via docker compose up
Keycloak ist nun erreichbar unter: http://localhost:8080/auth
Konfiguration von Keycloak
Da sich die nächsten Teile der Blogserie mit der Integration eines Resource Servers sowie einer Frontend Anwendung beschäftigt, soll nun beschrieben werden wie Keycloak dafür konfiguriert werden muss.
- Dazu öffnen wir die grafische Oberfläche von Keycloak
http://localhost:8080/auth/
und klicken auf Administration Console - In der Loginmaske geben wir Username / Passwort ein (admin / Pa55w0rd)
- Diese wurden im docker-compose.yml definiert unter: KEYCLOAK_USER & KEYCLOAK_PASSWORD
Realm
Der Realm ist ein organisatorischer Bereich in Keycloak zur Verwaltung aller technischen Elemente
- Realm mit dem Namen:
secure-realm
erstellen - Enabled auf true setzen (default)
Client
Clients in Keycloak sind Entitäten, welche die Authentifizierung für einen Benutzer anfragen. Oder einfacher ausgedrückt: Services welche ihre Benutzer gegenüber Keycloak authentifizieren möchten.
In unserem Fall ist der Client, die im dritten Teil der Blogserie entstehende Client App.
- Anlage des Clients mit dem Namen
secure-client
- Nach der Anlage:
- Enabled: true
- Client-Protocol: openid-connect
- Access Type: public
- Standard-Flow Enabled: true
- Direct Access Grants Enabled: true
- Valid Redirect Urls: http://localhost:4200/*
- Diese URL muss mit dem Client, welcher die Authentifizierungsanfrage an Keycloak stellt übereinstimmen (Unsere Client App)
- Web Origins: *
- Nach der Anlage:
Rolle
Rollen werden in Keycloak dazu verwendet, mehrere Berechtigungen in einem technischen Element zu verwalten.
- Rolle erstellen:
default-user-role
Client Scope
Der Client Scope ist ein technisches Element von Keycloak welches den Realm mit dem Client verlinkt.
- Client Scope erstellen:
default-user-scope
- Navigation zu Clients
- Klick auf secure-client (den von uns erstellten Client)
- Klick auf Client Scopes
- Selektion von default-user-scope
- Klick auf Add selected
Benutzer
Ein Benutzer in Keycloak ist die Entität welche sich gegenüber dem System authentifizieren will. Dabei findet die Authentifizierung über den Client statt.
- Benutzer erstellen
client-user
- User Enabled: true
- Email Verified: true
- Benutzer ein Passwort geben
test
- Temporary: false (default = true)
Für die Benutzerverwaltung in verteilten Systemen, lässt sich Keycloak einsetzen. Die Konfiguration der Elemente in Keycloak ist logisch und gut verständlich und fügt sich in das Gesamtbild Identity & Access Management gut ein. Für Entwicklungszwecke kann in überschaubarer Zeit das System vollumfänglich verwendet werden. Für den Einsatz in produktiven Umgebungen sind allerdings noch einige Sicherheitsvorkehrungen notwendig, deren Aufwand nicht unterschätzt werden sollte.
Github
Zum Keycloak Server & Spring Boot Resource Server
Weitere Interessante Links und Quellen zum Thema
Die Rollverteilung im OAuth 2.0 Standard verstehen und Vorstellung des Implizit Flow
https://ordina-jworks.github.io/security/2019/08/22/Securing-Web-Applications-With-Keycloak.html#/