OpenID Connect Provider-01-01

Mit der Entwicklung der OpenID Connect Provider App, die wir auf dem Univention Summit 2018 ankündigten, ist uns ein weiterer, wichtiger Schritt gelungen, UCS zu einer sicheren und offenen Plattform für das Management unterschiedlichster Dienste auszubauen.

Das Ziel, das wir damit verfolgen: Alle UCS Nutzer sollen zu jeder Zeit die volle Kontrolle über ihre Daten und digitalen Identitäten behalten. Und sie sollen die größtmögliche und freie Wahl zwischen unterschiedlichen Softwareanwendungen haben.

Mit dieser App bieten wir nun neben dem schon lange in UCS integrierten SAML Identity Provider eine zusätzliche Technologie an, mit der Administratoren Applikationen von Drittanwendern per Single Sign-on an UCS anbinden können. Die dafür nötige Authentifizierung des Nutzers läuft gegen das UCS Identity Management. Das Benutzerpasswort wird, wie bei der Anmeldung via SAML, nicht an den angebundenen Dienst weitergegeben, sondern verbleibt in Ihrem System und damit unter Ihrer Kontrolle.

Die anzubindenden Dienste müssen eine Schnittstelle mitbringen, um als OpenID Relying Party arbeiten zu können. Die App basiert auf der von Kopano entwickelten Software Konnect, ein in der Programmiersprache Go entwickelter OpenID Connect Provider.

Single Sign-On mit OpenID Connect und SAML

Der Einsatzzweck bei der Verwendung von OpenID Connect ist vergleichbar mit dem Einsatz eines SAML Identity Providers. Der angebundene Dienst bekommt das Benutzerpasswort nicht mitgeteilt, sondern erhält nur die Information, dass der Benutzer sich erfolgreich am Identity Management angemeldet hat. Dazu muss beim Einsatz von OpenID Connect wie auch bei SAML eine Vertrauensbeziehung zwischen dem Identity Provider – hier UCS – und dem angebundenen Dienst hergestellt werden, bevor sich Benutzer anmelden können.

Bei SAML wird dazu ein Zertifikatspaar erstellt, der öffentliche Schlüssel wird auf dem angebundenen Dienst hinterlegt. Beim Einsatz des OpenID Connect Providers funktioniert das Herstellen des Vertrauens ähnlich. Hier wird allerdings für die Kommunikation ein gemeinsames Geheimnis (shared secret) in UCS und dem externen Dienst hinterlegt. Ein weiterer wichtiger Unterschied zwischen beiden Anmeldeverfahren ist, dass bei SAML die gesamte Kommunikation über den Browser des Benutzers läuft, der sich am UCS anmeldet. Bei OpenID Connect läuft die initiale Anmeldung normalerweise ebenfalls über einen Browser. Anschließend baut der externe Dienst aber auch noch eine direkte HTTPS Verbindung zum UCS Identity Provider auf, um benötigte Benutzerattribute wie beispielsweise Name und E-Mailadresse abzufragen.

Anbindung externer Dienste – Funktionsweise der App

Nach der Installation der App aus dem Univention App Center können Sie externe Dienste per OpenID Connect an UCS anbinden, indem Sie diesen Dienst in der Univention Management Console im LDAP Browser im Container oidc hinzufügen, der sich unterhalb des Containers cn=univention befindet. Hier können Sie über den Punkt Hinzufügen und die Auswahl OpenID Connect Relying Party Service den neuen Dienst registrieren. Das gleiche ist über die Kommandozeile möglich:

udm oidc/rpservice create --set name=<UCS_interner_Bezeichner> \
--position=cn=oidc,cn=univention,$(ucr get ldap/base) \
--set clientid=<ID> \
--set clientsecret=<Ein_langes_Passwort> \
--set trusted=yes \
--set applicationtype=web \
--set redirectURI=<URL_aus_Dokumentation
  • name ist der beim Login im Webinterface angezeigte Dienstname.
  • clientid und secret müssen hier und beim angebundenen Dienst identisch sein (shared secret).
  • trusted wird auf yes gesetzt, wenn dem Benutzer keine separate Bitte um Bestätigung zur Übertragung seiner Benutzerattribute angezeigt werden soll. Dies sollte standardmäßig gesetzt werden.
  • applicationtype wird für Internetdienste auf web gesetzt.
  • redirectURI ist die URL des Login Endpunkts, die in der Dokumentation des angebundenen Dienstes zu finden ist. Ist ein Dienst über mehrere URLs erreichbar oder soll er auch per IP Addresse aufrufbar sein, müssen alle möglichen Adressen zum Attribut redirectURI hinzugefügt werden.

Der angebundene Dienst braucht für seine Konfiguration noch Informationen über die OpenID Connect Endpunkte der App. Diese sind bei installierter App unter der URL https://<FQDN des Servers>/.well-known/openid-configuration abrufbar.

Beispielanbindung von WordPress an UCS OpenID Connect Provider

Beispielhaft stelle ich Ihnen vor, wie Sie WordPress als OpenID Relying Party an das IDM von UCS anbinden. Dazu wird neben der OpenID Connect Provider App die WordPress App aus dem Univention App Center installiert. Um den Prozess einfach zu gestalten, installieren wir in diesem Beispiel beide Apps auf dem UCS DC Master.

Jetzt muss WordPress mit einem Plugin auf den Login per OpenID Connect vorbereitet werden. Der Benutzername des WordPress Administrators lautet wp-admin. Das Passwort ist in der Datei /etc/wordpress-admin.secret zu finden. Als Administrator erreichen Sie das Plugins-Menü in der WordPress Administrationsoberfläche über Einstellungen. Unter dem Punkt Plugins -> Installieren kann durch eine Suche das Plugin OpenID Connect Generic Client gefunden, installiert und aktiviert werden.

In den Einstellungen des Plugins muss als Nächstes die Verbindung zum UCS Provider hergestellt werden. Unter Einstellungen befindet sich nun OpenID Connect Client als neue Kategorie. Hier wird der UCS Provider hinzugefügt. Die Einstellungen sind wie folgt vorzunehmen:

Login Type: OpenID Connect on login form

Client ID und Secret Key sind frei wählbar, müssen aber in der UCS Konfiguration identisch angegeben werden, siehe unten. Scope definiert die Attribute, die das Plugin vom UCS Benutzer benötigt.

Client id: wordpress-ucs
secret: averysecretpassword
Scope: openid profile email offline_access

In die folgenden Felder sollten die entsprechenden Werte aus der Well Known Configuration des OpenID Connect Providers eingetragen werden, die man unter https://<FQDN des Servers>/.well-known/openid-configuration einsehen kann. Ein entsprechender Link befindet sich auch in der UMC App Beschreibung nach der Installation.

Login Endpoint URL: https://<FQDN des Servers>/signin/v1/identifier/_/authorize
Userinfo Endpoint URL: https://<FQDN des Servers>/konnect/v1/userinfo
Token Validation Endpoint URL: https://<FQDN des Servers>/konnect/v1/token
End Session Endpoint URL: https://<FQDN des Servers>/signin/v1/identifier/_/endsession
Identity Key: name
Nickname Key: name
Email Formatting: {name}@mail.domain
Display Name Formatting: {family_name}

openid-connect-wordpress-anbindung

Beim Punkt Email Formatting wird der Benutzername und eine generische Maildomain verwendet.

Im selben Feld kann auch der Wert {email} gesetzt werden. In diesem Fall muss aber sichergestellt sein, dass für die UCS Benutzer eine E-Mailadresse konfiguriert wurde. Andernfalls schlägt der Login des Benutzers fehl.

Mit einem Klick auf Änderungen Speichern wird UCS als OpenID Connect Provider in WordPress registriert.

Jetzt gilt es, die WordPress Konfiguration in UCS bekannt zu machen. Dafür müssen die Optionen über eine Terminalsitzung übergeben werden. Die Werte clientid und secret müssen identisch zu den oben eingegebenen Werten in WordPress passen.

udm oidc/rpservice create --set name=Wordpress \
 --position=cn=oidc,cn=univention,$(ucr get ldap/base) \
 --set clientid=wordpress-ucs \
 --set clientsecret=averysecretpassword \
 --set trusted=yes \
 --set applicationtype=web \
 --set redirectURI="https://$(ucr get hostname).$(ucr get domainname)/wordpress/wp-admin/admin-ajax.php"

OIDC-udm-settings

Damit ist die Einrichtung abgeschlossen und der Zugriff kann getestet werden. Auf der WordPress Loginseite ist jetzt ein zusätzlicher Button ‘Login with OpenID Connect’ sichtbar. Auf der OpenID Connect Provider Loginseite können jetzt die gewohnten UCS Benutzerdaten verwendet werden. Damit der Login reibungslos funktioniert, ist darauf zu achten, dass die WordPress Loginseite über den FQDN des UCS Systems aufgerufen wird, da die Weiterleitung für Benutzer nach der Authentifizierung sonst fehlschlägt.

Wir würden uns freuen, wenn wir Ihnen durch die OpenID Connect App eine weitere, gute Möglichkeit bieten können, Ihre IT-Landschaft durch neue Applikationen zu erweitern, auf die Sie gleichermaßen einfach und sicher zugreifen können. Teilen Sie gern Ihre Erfahrungen und Fragen über das unten stehende Kommentarfeld mit uns und anderen UCS Nutzern.

Wir sind gespannt auf Ihr Feedback. Weitergehende Fragen zum Einsatz der App können Sie auch in unserem Forum stellen.

UCS Core Edition jetzt kostenfrei einsetzen!

Zum Downloadbereich
Erik Damrose

Erik Damrose ist Open Source Software Engineer bei Univention und hauptsächlich in den Bereichen Authentifikation, Virtualisierung und Mailstack tätig.

Was ist Ihre Meinung? Hinterlassen Sie einen Kommentar!

Kommentare

  1. Hallo,

    muss also das UCS System, auf welchem die openID APP installiert ist, auch aus dem Internet erreichbar sein?

    Cheers
    Sebastian

    Antworten
  2. Hallo Sebastian, das kommt ganz auf das Szenario an.

    Grundsätzlich funktioniert das OpenID Connect Protokoll so, dass der angebundene Dienst während der Anmeldung eines Benutzers direkt bei dem Server auf dem der OpenID Connect Identity Provider läuft Benutzerattribute abfragt – dafür müssen diese Systeme sich gegenseitig erreichen können.

    Steht der Server mit dem Dienst im eigenen Intranet, muss das UCS System dafür nicht aus dem Internet erreichbar sein.
    Läuft zum Beispiel ein WordPress hingegen bei einem externen Hoster, muss auch der OpenID Connect Provider auf dem UCS aus dem Internet erreichbar sein.

    Viele Grüße,
    Erik Damrose

    Antworten

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