Das hier ist sowohl Blogpost als auch meine eigene kleine Dokumentation. Ich suche eigentlich schon seit langer Zeit nach einer Möglichkeit Logins zentral zu verwalten. Habe es erst mit einem LDAP-Server versucht, bin damit aber nicht so ganz zu recht gekommen. Hintergrund ist, das ich einige Dienste anbiete, wenn auch nur meiner Familie. Dazu zählen Dinge wie Nextcloud, ein Mailserver, Jellyfin, Tandoor-Kochbuch, Homeassistant, Forgejo, Calibre-Web,…all so was. Und bei vielen dieser Dienste kann man die Logins nicht abschalten, also das man ohne Passwort rein kommt. Da die Dienste nur im internen Netz laufen (zumindest zu einem guten Teil) wäre das eine gangbare Alternative. Aber zum Beispiel beim Tandoor-Recipes-Kochbiuch muss man sich zwangsweise einloggen. Bei anderen Diensten ist es wiederum extrem sinnvoll (Nextcloud, Vaultwarden) Um überall das gleiche Passwort verwenden zu können und sich im Idealfall nur einmal anmelden zu müssen , habe ich jetzt noch Keycloak installiert.

Die reine Installation von Keycloak war ziemlich einfach, zumindest im Entwicklungsmodus. Dem ganzen eine Datenbank zu hinterlegen, damit die Daten nicht weg sind ging auch noch. Schwieriger fand ich tatsächlich die Integration in Nextcloud, so das sich nur Accounts die einer bestimmten Gruppe angehören anmelden können. Da ich noch eine Nextcloud für ein paar Freunde betreibe, sollten die sich nur bei ihrer eigenen Instanz anmelden können, aber ich wollte die Accounts trotzdem am gleichen Ort pflegen.

Nehmen wir also an, wir haben eine (oder mehrere) Instanz einer Nextcloud (friends.example.de) und den Keycloak (sso.example.de) am laufen, dann müssen folgende Dinge eingestellt werden:

  • Beim Keycloak legt man erstmal einen neuen Realm an (z. B. Nextcloud)
  • Dann wechselt man in diesen Realm und legt dort einen neuen Client an, gibt dem Kind einen Namen und trägt als Root-URL die URL seiner Nextcloud ein (friends.example.de).

Den Rest kann man auf Default lassen. Auf dem nächsten Tab kopiert man sich das Client-Secret raus, das brauchen wir gleich bei der Nextcloud:

  • Bei der Nextcloud installiert man zunächst einmal OpenID Connect user Backend aus dem App-Store.
  • Unter dem neuen Punkt bei den Administrationseinstellungen OpenID Connect legt man nun einen neuen Anbieter an, gibt dem Kind einen Namen (Keycloak) und trägt als Erkennungsendpunkt
    https:/sso.example.de/realms/<realm>/.well-known/openid-configuration ein. Das muss man natürlich anpassen, wenn man andere Werte genommen hat.
  • Die Client_ID muss übrigens dem Wert beim Keycloak entsprechen.
  • Bei der geheimen Zeichenkette kommt das Client-Secret von Keycloak rein.
  • Eindeutige Benutzer-IDs und Providererkennung als Präfix ist Geschmackssache. Ich lasse gerne beides aus, weil es eben genau einen Nutzer MaxMuster geben soll. Egal worüber er sich anmeldet.
  • Der Knackpunkt ist die Gruppenbereitstellung und die entsprechende Whitelist. Dadurch wird die Gruppe, in der sich der Account bei Keycloak befindet auf der Nextcloud angelegt und der User dieser Gruppe hinzugefügt. Wenn es die Gruppe schon gibt, wird sie logischerweise nicht mehr angelegt.
  • Ich lege mir in Keycloak also eine Gruppe friends an und packe jeden Account, der Zugriff auf diese Nextcloud haben soll da rein. Anschließend lege ich die Gruppe in der Nextcloud an und trage die Gruppe in der Whitelist ein. (/friendsA|friendsB/) Gibt ja vielleicht mehrere.
  • Außerdem wichtig ist es in Keycloak einen Mapper zu bauen. Also unter Clients wählen wir unseren Client, dann Client-Scope, dann den einzigen Scope der anklickbar ist und sind bei den mappern.
  • Hier legen wir uns einen neuen by configuration an und wählen die group membership aus.

Als letztes hake ich in der Nextcloud bei dem Anbieter an, das nur Mitglieder einer Gruppe in der Whitelist sich anmelden können.

Full Group Path muss aus sein, ansonsten übermittelt keycloak /friends und auf einen slash kann man so schlecht matchen mit einem Regex…es geht, ist aber doof.

Von karsten

2 Gedanken zu „Nextcloud mit Keycloak“
  1. @blog.home.kalterwinter.info Du kannst für ein bisschen extra Sicherheit den Direct Access Grant deaktivieren. Da er nicht genutzt wird und erwartet dass die Anwendung Passwörter im eigenen Webformular abfragt und an Keycloak weiterleitet, statt einem redirekt zu machen. Deine Nextcloud sollte so etwas nie tun.

Schreibe einen Kommentar zu karsten Antwort abbrechen

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