ADMIN
2025
03
2025-02-27T12:00:00
Monitoring und Hochverfügbarkeit
PRAXIS
050
Security-Tipp
Sicherheit
Benutzerauthentifizierung
Identity- und Access-Management mit Logto
Digitale Einlasskontrolle
von Dr. Matthias Wübbeling
Veröffentlicht in Ausgabe 03/2025 - PRAXIS
Sichere Benutzerauthentifizierung ist heute das Fundament jeder modernen Anwendung – doch die Implementierung stellt Entwickler vor große Herausforderungen. Während cloudbasierte IdentityManagement-Systeme bereits weit verbreitet sind, wächst der Bedarf nach selbstgehosteten Alternativen stetig. Mit Logto beleuchten wir eine flexible IAM-Software, die sowohl in der Cloud als auch On-Premises läuft und Entwickler- wie Benutzerfreundlichkeit im Blick behält.

Die sichere Verwaltung von Benutzern und deren Zugriffsrechten gehört zu den grundlegenden Herausforderungen der Entwicklung von Software. Besonders in einer vernetzten Welt, in der Anwendungen Daten über APIs austauschen und verschiedene Plattformen unterstützen müssen, ist hier eine robuste Lösung unerlässlich. An dieser Stelle setzt etwa OAuth 2.0 an – ein Protokoll für die standardisierte und sichere Authentifizierung und Autorisierung von Benutzern. OAuth2 wurde maßgeblich von der Internet Engineering Taskforce (IETF) vorangetrieben und Ende 2012 in einem RFC veröffentlicht. Die Erfahrungen aus der Benutzung der ersten Version von 2009 sind hier eingeflossen und in einer größeren Community abgestimmt. Die Idee ist einfach: Ein zentraler Logindienst verwaltet Benutzer, deren Einstellungen und Anmeldedaten. Einmal registrierte Anwendungen können die Benutzer dann damit authentifizieren und Berechtigungen für die Nutzung umsetzen.
Diese zentrale Verwaltung schafft eine klare Trennung zwischen Benutzeridentitäten und den eigentlichen Anwendungen. Dies bedeutet, dass Anwendungen selbst keine sensiblen Anmeldeinformationen speichern oder verarbeiten müssen, was das Sicherheitsrisiko erheblich reduziert. Stattdessen arbeiten sie mit sogenannten Tokens, die vom OAuth-2.0-Provider stammen. Häufig kommen dafür Jason Web Tokens (JWT) zum Einsatz. Diese sind zeitlich begrenzt und ermöglichen es, rollenbasiert auf Ressourcen oder Dienste zuzugreifen, ohne dass die eigentlichen Benutzerzugangsdaten offengelegt werden.
Für Entwickler ist die Arbeit mit OAuth2 und den definierten Protokollen allerdings eine Herausforderung: Die richtige Konfiguration von Clients, die Verwaltung von Tokens und die Umsetzung von Sicherheitsstandards wie PKCE (Proof Key for Code Exchange) erfordern ein tiefes Verständnis des Protokolls. Hier kommen Plattformen wie Auth0 von Okta zum Einsatz, das von Okta in einer öffentlichen oder privaten Cloud für Sie betrieben wird. Als Alternative zu den kostenpflichtigen Anbietern bietet sich Logto [1] an, das Sie kostenfrei selbst betreiben können.
Die sichere Verwaltung von Benutzern und deren Zugriffsrechten gehört zu den grundlegenden Herausforderungen der Entwicklung von Software. Besonders in einer vernetzten Welt, in der Anwendungen Daten über APIs austauschen und verschiedene Plattformen unterstützen müssen, ist hier eine robuste Lösung unerlässlich. An dieser Stelle setzt etwa OAuth 2.0 an – ein Protokoll für die standardisierte und sichere Authentifizierung und Autorisierung von Benutzern. OAuth2 wurde maßgeblich von der Internet Engineering Taskforce (IETF) vorangetrieben und Ende 2012 in einem RFC veröffentlicht. Die Erfahrungen aus der Benutzung der ersten Version von 2009 sind hier eingeflossen und in einer größeren Community abgestimmt. Die Idee ist einfach: Ein zentraler Logindienst verwaltet Benutzer, deren Einstellungen und Anmeldedaten. Einmal registrierte Anwendungen können die Benutzer dann damit authentifizieren und Berechtigungen für die Nutzung umsetzen.
Diese zentrale Verwaltung schafft eine klare Trennung zwischen Benutzeridentitäten und den eigentlichen Anwendungen. Dies bedeutet, dass Anwendungen selbst keine sensiblen Anmeldeinformationen speichern oder verarbeiten müssen, was das Sicherheitsrisiko erheblich reduziert. Stattdessen arbeiten sie mit sogenannten Tokens, die vom OAuth-2.0-Provider stammen. Häufig kommen dafür Jason Web Tokens (JWT) zum Einsatz. Diese sind zeitlich begrenzt und ermöglichen es, rollenbasiert auf Ressourcen oder Dienste zuzugreifen, ohne dass die eigentlichen Benutzerzugangsdaten offengelegt werden.
Für Entwickler ist die Arbeit mit OAuth2 und den definierten Protokollen allerdings eine Herausforderung: Die richtige Konfiguration von Clients, die Verwaltung von Tokens und die Umsetzung von Sicherheitsstandards wie PKCE (Proof Key for Code Exchange) erfordern ein tiefes Verständnis des Protokolls. Hier kommen Plattformen wie Auth0 von Okta zum Einsatz, das von Okta in einer öffentlichen oder privaten Cloud für Sie betrieben wird. Als Alternative zu den kostenpflichtigen Anbietern bietet sich Logto [1] an, das Sie kostenfrei selbst betreiben können.
Logto verwendet natürlich auch die von OAuth 2.0 und OpenID Connect definierten Standards und bietet neben dem zentralen Server auch einfach integrierbare Bibliotheken für unterschiedliche Programmiersprachen und Anwendungs-Frameworks. Im Folgenden setzen wir gemeinsam den Logto-Server auf und entwickeln eine kleine Anwendung in PHP, um die Einbindung und Nutzung von Logto aus Administrator- und Benutzersicht zu demonstrieren.
Logto installieren und einrichten
Bevor wir mit der Integration von Logto in eine PHP-Anwendung beginnen, richten wir zunächst den Logto-Server selbst ein. Der Anbieter hinter der Software bietet Ihnen die kostenpflichtige Möglichkeit, diese als SaaS-Dienst zu nutzen. Sie können Logto aber auch lokal oder auf einem eigenen Server betreiben, was insbesondere für Anwendungen mit speziellen Datenschutz- oder Sicherheitsanforderungen interessant ist. Im Folgenden nutzen wir die selbstgehostete Variante.
Die Installation erfolgt wie so häufig mittels Docker-Image. Das erlaubt eine einfache und schnelle Bereitstellung zu Demonstrationszwecken. Nach dem Klonen des offiziellen Logto-Repositories [2] mit dem folgenden Kommando können Sie in dem Verzeichnis einen Blick in die Datei "docker-compose.yaml" werfen:
git clone https://github.com/logto-io/logto.git
Diese eignet sich bereits in der vorliegenden Version dafür, den Server direkt zu starten. Führen Sie bei Bedarf Anpassungen an Ihrer Testinfrastruktur durch, etwa einen Wechsel der Netzwerkports, und rufen Sie dann das Kommando docker compose up
auf. Der Server startet nun und Sie erhalten die Logausgaben zur Kontrolle direkt auf der Konsole. Wie Sie in der Compose-Datei gesehen haben, verwendet Logto zwei Ports, einen für den Logindienst der Benutzer und einen für die Admin-Oberfläche. Wenn Sie diese nicht geändert haben, öffnen Sie die URL "http://localhost:3002" in Ihrem Browser zur Administration.
Legen Sie ein neues Konto für den Administrator an und schauen Sie sich zunächst etwas um. Im Dashboard ist natürlich noch nicht viel zu sehen, es gibt ja noch keine Benutzer oder Anwendungen, aber unter "Authentication / Connectors" können Sie etwa einen E-Mailbenutzer hinterlegen, um Usern die Authentifikation auch passwortlos zu ermöglichen. Diese erhalten dann bei jedem Login einen Einmaltoken per E-Mail zugesendet. Unter "Authentication / Multi-factor auth" können Sie weitere Faktoren wie OTP via Apps oder Passkeys (FIDO2) aktivieren und erzwingen. Bleibt MFA optional, lassen sich die Benutzer trotzdem direkt bei der Registrierung oder dem ersten Login zur Einrichtung auffordern.
Legen Sie nun unter "Authentication / Applications" eine neue Anwendung für unser Beispiel an. Nach dem Klick auf "+ Create Application" suchen Sie den "PHP"-Guide und wählen dort "Start building". Oberhalb der Anleitung finden Sie hinter dem Button "Check out sample" eine Beispieldatei für PHP, die Sie zum Probieren herunterladen können. Schauen Sie sich aber auch die Codebeispiele in der Beschreibung näher an.
Speichern Sie dann die Anwendung am unteren Bildschirmrand mit einem Klick auf "Finish and done". Nun können Sie die angelegte Anwendung direkt konfigurieren. Gehen wir dafür davon aus, dass diese auf Port 8080 auf Ihrem System laufen wird. Füllen Sie die Locations der Callback-URLs aus. Etwas weiter unten finden Sie im Bereich "Endpoints & Credentials" die App-ID und das erzeugte App-Secret, die Sie für die Anwendung später benötigen.
Anwendungsentwicklung
Machen Sie mit der Anwendung in Form der heruntergeladenen Datei "index.php" weiter. Wir gehen davon aus, dass Sie bereits PHP und Composer auf Ihrem System installiert haben. Führen Sie in einem dafür angelegten Ordner nun die Logto SDK-Installation mit dem folgenden Kommando aus:
compose require logto/sdk
Wenn Sie nach der Installation die Dateien "composer.json" und "composer.lock" sowie den Ordner "vendor" sehen, war diese erfolgreich. Erstellen Sie einen Ordner "public" und legen dort die oben heruntergeladene Datei "index.php" ab. In unseren Tests wurde mit dem Composer-Kommando die Version 0.2.1 aus April 2024 installiert. Diese funktioniert leider nicht mit der neueren "index.php", daher brauchen wir die aktuellen Quellen des SDKs. Verschieben Sie mit den folgenden Kommandos die vorhandenen SDK-Dateien und klonen dann das aktuelle PHP-SDK von GitHub [3] als Ersatz:
mv vendor/logto/sdk vendor/logto/sdk.bak
git clone https://github.com/logto-io/php.git vendor/logto/sdk
Nun legen Sie eine Umgebungsdatei zur Konfiguration der Anwendung mit dem Namen ".env" an und füllen diese mit den entsprechenden Werten, die Sie vorher der Konfiguration in der Administration entnommen haben:
LOGTO_ENDPOINT=http://localhost:3001/
LOGTO_APP_ID=pmh2rr9hp1iew52jyhh5z
LOGTO_APP_SECRET=RNHEO6c0lvF7doVWPFa8f75GqsgKOx3E
Haben Sie den Port von Logto in der Compose-Datei geändert, müssen Sie hier natürlich nicht 3001, sondern den tatsächlichen Port hinter "localhost" angeben. Starten Sie nun den in PHP integrierten Server mit dem folgenden Kommando:
php -S localhost:8080 -t public public/index.php
Mit "-S" starten Sie den Server auf dem lokalen Interface an Port 8080, mit "-t" definieren Sie das Wurzelverzeichnis des Webservers und mit der Angabe von "public/ index.php" legen Sie die Routerdatei fest, an die unabhängig vom Pfad die Anfragen geleitet werden. Rufen Sie nun in Ihrem Browser die URL "http://localhost:8080/" auf, gelangen Sie zum Menü mit unterschiedlichen Login-Optionen. Diese werden natürlich üblicherweise von der Anwendung vorgegeben, in unserem Beispiel wählen Sie als Benutzer nun eine der Optionen.
Da Sie noch keinen Benutzer angelegt haben, klicken Sie zunächst auf "Sign In (Sign Up First)" und registrieren sich dort. Nach der Umleitung sehen Sie dann im Browser die von Ihnen angelegten Informationen so, wie sich diese in Ihrer Anwendung für die Benutzer verwenden lassen. Für weitere Anregungen erstellen Sie beispielsweise eine Organisation im Backend und fügen dieser Ihren Benutzer mit unterschiedlichen Rollen hinzu. Diese benötigen Sie ja am Ende für die rollenbasierte Autorisierung in Ihrer Anwendung. Versuchen Sie auch das Einbinden einer Unternehmens-SSO, beispielsweise mit Microsoft EntraID oder Googles Workspace.
Fazit
Das zentrale Benutzermanagement stellt sowohl für IT-Verantwortliche als auch Entwickler eine Herausforderung dar. Logto bietet eine praktische OAuth2-Backend-Lösung, die für den Produktiveinsatz noch um einen Frontproxy mit TLS-Verschlüsselung sowie eine gesicherte Datenbank-Infrastruktur erweitert werden muss. Nach der Einrichtung profitieren Benutzer von einem vereinfachten Single Sign-on für alle integrierten Anwendungen.
(dr)
Link-Codes
[1] Logto-Website:
https://logto.io/
[2] Logto-Repository auf GitHub:
https://github.com/logto-io/logto