SSO JWT – Gruppenübergabe

Ich nutze GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub für die Authentifizierung mit einem benutzerdefinierten JWT-Dienst.

Die Anmeldung des Benutzers funktioniert, aber das Übergeben des Schlüssels groups scheint keine Wirkung zu haben. Ich habe den Code von ManagedAuthenticator durchsucht, konnte aber auch dort nichts bezüglich Gruppen finden.

Fehlt hier etwas, oder liegt mein Verständnis falsch?

Danke!

Du verpasst nichts – das JWT-Plugin unterstützt das Übergeben von Gruppen nicht. Um dies zu ermöglichen, wären einige Entwicklungsarbeiten am Plugin erforderlich.

@david Wie schwierig denkst du, ist das für jemanden, der noch keine Plugins geschrieben hat? Ist es so einfach, die aus dem JWT stammenden Gruppen von Discourse abzurufen und das Abfrageergebnis (der Gruppenobjekte) user.groups zuzuweisen? Ich habe einige Erfahrung mit dem Plugin (so simpel es auch ist) und könnte das vielleicht umsetzen.

Sollte ich mir überhaupt die Mühe machen? Wenn ich einen JWT habe, kann ich mich dann über OpenID Connect authentifizieren?

Das hängt davon ab, wie Sie es funktionieren lassen möchten… Sie möchten wahrscheinlich auch normale Gruppen in Discourse erstellen können, ohne dass JWT zufällig Mitglieder daraus entfernt. In unserem nativen Discourse-SSO-System lösen wir dies mit zwei Parametern: „Gruppen hinzufügen“ und „Gruppen entfernen“.

https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179

Im JWT-Plugin würden Sie diese Logik wahrscheinlich in der Funktion after_authenticate des Authenticators implementieren. Stellen Sie sicher, dass Sie super aufrufen und dessen Antwort zurückgeben, damit alle bestehenden Funktionen weiterhin korrekt arbeiten. Ein Beispiel für eine solche Überschreibung finden Sie hier.

Toll! Das gibt mir, was ich wollte; ich sollte den Rest selbst herausfinden können. Danke!

Haben Sie das bereits umgesetzt? Ich frage mich, wie man eine SSO-Authentifizierung nur mit JWT durchführen kann.

Das discourse-jwt-Plugin funktioniert. Allerdings scheint es aus irgendeinem Grund nur mit dem HS256-Algorithmus zu arbeiten. Es ist jedoch recht einfach, es auch für andere Algorithmen nutzbar zu machen.

Du kannst dir das Repo ansehen, mit dem ich herumgespielt habe: discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub