S3I Gruppenkonzept
Das Gruppenkonzept wurde schon in der Datei „S3I Standpunkt Security“ eingeführt. Ein wichtiger Punkt war, das Gruppen analog zu Personen als WH4.0-Komponente aufgenommen werden. D.h. zu jeder Gruppe gehören drei Einträge: Eintrag vom zugehörigen DZ bzw. Thing im S3I-Directory, dessen ThingIdenitity im S3I-Idenitity und die GroupIdentity im S3I-IdentityProvider. Für die Implementierung auf der Seite des IdentityProviders werden die Gruppen von Keycloak verwendet. Folgende Punkte müssen jedoch beachtet werden:
- Es soll erkennbar sein, ob der DZ einer Gruppe oder eine Person zugehört.
- Der „owner“ der DZ ist die Gruppe selbst, die mit einer eigenen ID identifiziert wird. Zusätzlich muss deshalb einen Admin existieren, der die Gruppe verwaltet.
- Die Gruppenmitglieder sollen aufgelistet werden.
Der Vorschlag wäre group-spezifische Attribute einzuführen (auf der Ebene von Ditto-Attributen):
- representGroup-Attribut, der explizit darauf hinweist, dass der DZ eine Gruppe repräsentiert.
- groupMembers-Attribut für das Auflisten der Gruppenmitglieder.
- name-Attribut kann (weiterhin) als Gruppenname verwendet werden.
- Gruppen können konkrete roles haben.
- adriminstratedBy-Attribut weist auf Gruppenadmin hinzu. Dieser kann Gruppenmitglieder anlegen und schreibend auf die GroupIdentity in Keycloak zugreifen.
{
"thingId": "s3i:6b1c90d0-0234-4ce7-9094-06ec2259dd5c",
"policyId": "s3i:6b1c90d0-0234-4ce7-9094-06ec2259dd5c",
"attributes": {
"representsGroup": "fb53c22f-48a6-42ad-a611-3fb9f000e718",
"administratedBy": "ab53c22f-22b6-42ad-a611-2fb9f111e718",
"name": "FBZ",
"type": "compenent",
"roles": [],
"groupMembers": []
}
}
API
- POST /groups: Erstellt Gruppe in Keycloak und die zugehörige DZ (mit den entsprechenden Directory-Eintrag). Aufrufende Person ist Gruppenadmin.
- GET /groups/{group_id}: Gibt die „GroupIdentity“ zurück. Soll von allen Gruppenmitglieder durchführbar sein.
- (Optional) PUT /groups/{group_id}: Aktualisiere bzw. Bearbeite GroupIdentity
- PUT /groups/{group_id}/persons/{person_name}: Füge die Person die Gruppe hinzu (die GroupIdentity, groupMemebers-Attribut im Directory-Eintrag, Policy müssen aktualisiert werden). Kann nur vom Gruppenadmin (administratedby-Attribut) durchgeführt werden.
- Zusätzlich: PUT /groups/{group_id}/persons/{person_list}: Mehrere Personen in einem Aufruf hinzufügen. personal_list ist eine komma-gentrennte Liste von person_name.
Beispiel Workflow
- Person erstellt Gruppe und wird zum Gruppenadmin.
- Fügt neue Gruppenmitglieder hinzu. S3I-Config-API checkt ob Gruppenadmin, aktualisiert „groupMembers“ im Directory-Eintrag, gibt die neue Gruppenmitglieder lesende Rechte auf dem Directory-Eintrag (durch das Aktualisieren vom Policy) und fügt die Mitglieder in Keycloaks Gruppe hinzu.