Fullstack-IAM Teil 1: Keycloak Authentifizierung für Webservices und Clients

21.10.2022

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

Erstellung der Bereitstellungsdatei docker-compose.yml

Start via docker compose up

Keycloak ist nun erreichbar unter: http://localhost:8080/auth

 

Keycloak Oberfläche

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)

Realm in Keycloak

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: *

Add Client in Keycloak

Secure-client in Keycloak

Rolle

Rollen werden in Keycloak dazu verwendet, mehrere Berechtigungen in einem technischen Element zu verwalten.

  • Rolle erstellen: default-user-role

Benutzerrollen in Keycloak

Client Scope

Der Client Scope ist ein technisches Element von Keycloak welches den Realm mit dem Client verlinkt.

  • Client Scope erstellen: default-user-scope

Client scope in Keycloak erstellen

  • 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

Client Scope zuweisen

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 in Keycloak erstellen

  • Benutzer ein Passwort geben test
  • Temporary: false (default = true)

Passwort für Nutzer erstellen in Keycloak

Fazit

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 Angular Client Projekt

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

OAuth 2.0: Der Authorization Code Flow im Detail

https://ordina-jworks.github.io/security/2019/08/22/Securing-Web-Applications-With-Keycloak.html#/

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*