@david Ich schließe mich der Diskussion von an
https://github.com/discourse/discourse-openid-connect/pull/7#issuecomment-758082333
Wie du dir wahrscheinlich denken kannst, liegt mir ebenfalls sehr daran, eine stabile Lösung für dieses Problem zu finden, das nicht spezifisch für das openid-connect-Plugin ist. Mal sehen, ob wir einen Weg nach vorne finden können.
Ich möchte auf deinen Punkt eingehen.
Wie entscheidest du, welchen Gruppen du den Benutzer hinzufügst oder aus denen du ihn entfernst? Und wie wirkt sich das auf das manuelle Hinzufügen/Entfernen von Benutzern aus Gruppen in Discourse selbst aus?
- Ein Benutzer authentifiziert sich über OIDC mit den Gruppen
['group1', 'group2']- In der Discourse-Benutzeroberfläche wird der Benutzer zur Gruppe
group3hinzugefügt- Später authentifiziert sich derselbe Benutzer über OIDC mit den Gruppen
['group1']Wenn wir dies als Mensch betrachten, sehen wir, dass der Endzustand
group1, group3sein sollte (group2 sollte entfernt werden). Aber ich glaube nicht, dass genügend Zustand verfolgt wird, um diese Entscheidung programmatisch zu treffen. Ebenso:
- Ein Benutzer authentifiziert sich über OIDC mit den Gruppen
['group1', 'group2']- In der Discourse-Benutzeroberfläche wird der Benutzer aus
group1entfernt- Später authentifiziert sich derselbe Benutzer über OIDC mit den Gruppen
['group1', 'group2']Was sollte jetzt passieren? Ein Administrator hat den Benutzer explizit aus
group1entfernt, aber OIDC hat ihn einfach wieder hinzugefügt. Das ist eine sehr verwirrende UX für den Administrator. Wir benötigen möglicherweise eine Möglichkeit, Gruppen als „extern verwaltet“ zu kennzeichnen und die gesamte Benutzeroberfläche zum Hinzufügen/Entfernen auszublenden
Ich denke, es gibt einige Möglichkeiten, wie wir dieses Problem angehen könnten (sie schließen sich nicht gegenseitig aus).
Identifizierung von Gruppen und Token-Attributen
In jeder Implementierung ist eine explizite Identifizierung erforderlich von:
- welchen Gruppen die Mitgliedschaft über die Authentifizierung verwaltet werden kann; und
- welche Attribute in einem Auth-Token die Gruppenmitgliedschaft steuern
Dies sollte entweder über Site-Einstellungen, Gruppeneinstellungen oder auf andere Weise erfolgen, und der Standardwert sollte „aus“ sein.
Strenge oder nachsichtige Behandlung
Die Behandlung ist „streng“, wenn ein Benutzer entfernt wird, wenn die Gruppe im identifizierten Token-Attribut fehlt. Die Behandlung ist „nachsichtig“, wenn ein Benutzer nicht entfernt wird, wenn die Gruppe im identifizierten Token-Attribut fehlt.
Der strenge/nachsichtige Zustand wird pro Gruppe festgelegt. Ein Beispiel dafür, wie du dies in einer Site-Einstellung umsetzen könntest, findest du hier: Handle groups by mattcg · Pull Request #7 · discourse/discourse-openid-connect · GitHub. Derselbe Ansatz könnte auch über eine Gruppeneinstellung umgesetzt werden.
Wie du vorschlägst, könntest du das Hinzufügen/Entfernen von Gruppenmitgliedschaften über den Gruppen-Admin deaktivieren, wenn die Behandlung „streng“ ist.
Identifizierung der Mitgliedschaftsquelle
Du könntest auch die Quelle der Gruppenmitgliedschaft in der Tabelle group_users speichern, um einen „gemischten“ Ansatz innerhalb einer Gruppe zu ermöglichen, d. h. ein Administrator kann keine Mitgliedschaften entfernen, die über ein Auth-Token erstellt wurden.
Je mehr ich darüber nachdenke, desto mehr bin ich der Meinung, dass dies über Gruppeneinstellungen erfolgen sollte.
