Hallo zusammen,
ich wollte das erst im "längsten Thema" ansprechen, dachte mir aber, dass es dort evtl. etwas untergeht und durchaus ein eigenes Thema verdient hätte (schon alleine wegen der Länge). Im Grunde geht es um die ganze SSO Thematik bei selbst gehosteten Services (z.B. Gitea, Nextcloud, Wikijs, ...). Jetzt speziell im privaten oder Vereinsumfeld. Im geschäftlichen Umfeld kommt man ja meist sowieso an Microsoft AD nicht vorbei. Aber auch für den kleineren Bereich gibt es ja einige vielversprechende Lösung wie
* Authelia (Simpel, aber schlecht skalierbar, da alles über ein großes YAML File konfiguriert wird)
* Authentik (Vielversprechend, komplex, hat aber einige Probleme zu denen ich später noch komme)
* Keycloak (Sehr komplex, eher für das Enterprise Umfeld geeignet, schwierige Updates)
* Zitadel (neu, weniger Features, schwierige Installation)
Das Protokoll, was man aktuell wohl einsetzen will, ist OpenID Connect (kurz OIDC), das auf OAuth 2.0 aufbaut. Ähnlich zu SAML, was aber durch die XML Struktur sehr komplex ist und daher schwierig is zu implementieren.
Was mich jetzt mal interessieren würde: Hat es jemand schon geschafft das wirklich zufriedenstellend zu implementieren? Mich beschäftigt dieses Thema schon so lange, baue mir immer wieder einen PoC, den ich aber immer wieder verwerfe, da ich wiederholt mit den gleichen Problemen zu kämpfen habe, für die ich einfach keine Lösung finde.
1. User bleiben nicht eingeloggt
Dieses Problem beschäftigt mich vor allem mit Gitea. Das ist im Grunde einer meiner wichtigsten App. Die Integration des OIDC Providers funktioniert im Grunde problemlos. Einmal konfiguriert, können sich User dort anmelden und beim ersten Mal einen bestehende Account verknüpfen (falls vorhanden) oder einen neuen erstellen. Während aber lokale User mit einem Cookie eingeloggt bleiben, werden für OIDC User keine Cookies gesetzt. Sprich diese User müssen sich mit jeder Session neu anmelden. Das ist in der Praxis natürlich sehr nervig. Das passiert mit anderen Apps zum Teil auch, aber oft haben die einen automatischen Redirect zum OIDC Provider und der Login wird automatisch vollzogen. In Gitea muss man z.B. erst auf "Anmelden" klicken, dann auf den Provider und wird anschließend erst wieder eingeloggt.
Link zum Gitea Issue: https://github.com/go-gitea/gitea/issues/28394
2. User bleiben eingeloggt
Das zweite Problem beschreibt im Grunde genau das Gegenteil. Das beobachte ich bei allen Apps, bei denen das mit dem Cookie klappt und User in der App eingeloggt bleiben, nachdem sie sich einmal erfolgreich am OIDC Provider authentifiziert habe. Und zwar bleiben die User auch dann noch eingeloggt, wenn diese sich aus dem eigentlichen OIDC Provider oder aus einer anderen Apps ausgeloggt haben. Entsprechend bleiben diese User auch dann noch eingeloggt, wenn der User sogar im zentralen OIDC Provider gesperrt oder gelöscht wurde. Das stellt aus meiner Sicht ein klares Sicherheitsrisiko da. Als Beispiel verlinkte ich da mal ein Issue bei Authentik:
Link zum Authentik Issue: https://github.com/goauthentik/authentik/issues/2023
Jetzt bin ich mal sehr gespannt auf eure Erfahrungen mit dem Thema. Gerade was die zwei genannten Probleme betrifft, die mich wirklich davon abhalten, dass ich das produktiv einsetzen kann. Ich vermute ja fast, dass an dem OIDC Protokoll an sich liegen könnte. Wie macht ihr das?
Gruß
Paul