Ich habe jetzt schon oft Sicherheitsmodelle implementiert und musste mich auch mit diesen Konzepten auseinandersetzen. Nachdem ich es viele Male getan habe, ist hier mein Verständnis dieser Konzepte.
Was sind Rollen?
Rolle = Die Vereinigung von Benutzern und Berechtigungen.
Einerseits ist eine Rolle eine Sammlung von Berechtigungen. Ich nenne es gerne ein Berechtigungsprofil. Wenn Sie eine Rolle definieren, fügen Sie dieser Rolle im Grunde eine Reihe von Berechtigungen hinzu, sodass eine Rolle in diesem Sinne ein Berechtigungsprofil ist.
Andererseits ist eine Rolle auch eine Sammlung von Benutzern. Wenn ich Bob und Alice zur Rolle "Manager" hinzufüge, enthält "Manager" jetzt eine Sammlung von zwei Benutzern, die einer Gruppe ähneln.
Die Wahrheit ist, dass eine Rolle sowohl eine Sammlung von Benutzern als auch eine Sammlung von Berechtigungen ist. Optisch kann dies als Venn-Diagramm betrachtet werden.
Was ist eine Gruppe?
Gruppe = Sammlung von Benutzern
Eine "Gruppe" ist ausschließlich eine Sammlung von Benutzern. Der Unterschied zwischen einer Gruppe und einer Rolle besteht darin, dass eine Rolle auch eine Sammlung von Berechtigungen hat, eine Gruppe jedoch nur eine Sammlung von Benutzern.
Was ist eine Erlaubnis?
Erlaubnis = Was ein Fach tun kann
Was ist ein Berechtigungssatz?
Berechtigungssatz = Eine Sammlung von Berechtigungen
In einem robusten RBAC-System können Berechtigungen auch wie Benutzer gruppiert werden. Während Gruppen nur eine Sammlung von Benutzern sind, ist ein Berechtigungssatz nur eine Sammlung von Berechtigungen. Auf diese Weise kann ein Administrator ganze Sammlungen von Berechtigungen gleichzeitig zu Rollen hinzufügen.
Wie Benutzer, Gruppen, Rollen und Berechtigungen zusammenkommen
In einem robusten RBAC-System können Benutzer einer Rolle einzeln hinzugefügt werden, um die Sammlung von Benutzern in der Rolle zu erstellen, oder Gruppen können einer Rolle hinzugefügt werden, um der Rolle gleichzeitig eine Sammlung von Benutzern hinzuzufügen. In beiden Fällen erhält die Rolle ihre Benutzersammlung durch individuelles Hinzufügen oder durch Hinzufügen von Gruppen zur Rolle oder durch Hinzufügen einer Mischung aus Benutzern und Gruppen zur Rolle. Berechtigungen können auf die gleiche Weise gedacht werden.
Berechtigungen können Rollen einzeln hinzugefügt werden, um die Sammlung von Berechtigungen innerhalb der Rolle zu erstellen, oder Berechtigungssätze können einer Rolle hinzugefügt werden. Schließlich kann einer Rolle eine Mischung aus Berechtigungen und Berechtigungssätzen hinzugefügt werden. In beiden Fällen erhält die Rolle ihre Sammlung von Berechtigungen durch individuelles Hinzufügen oder durch Hinzufügen von Berechtigungssätzen zu einer Rolle.
Der gesamte Zweck von Rollen besteht darin, Benutzer mit Berechtigungen zu heiraten. Eine Rolle ist daher die UNION der Benutzer und Berechtigungen.
Was sind Ansprüche?
Behauptung = Was für ein Thema "ist"
Ansprüche sind KEINE Berechtigungen. Wie in früheren Antworten ausgeführt, ist ein Anspruch das, was ein Subjekt "ist", nicht das, was ein Subjekt "kann".
Ansprüche ersetzen keine Rollen oder Berechtigungen, sondern sind zusätzliche Informationen, anhand derer eine Autorisierungsentscheidung getroffen werden kann.
Wann Ansprüche geltend gemacht werden sollen
Ich habe festgestellt, dass Ansprüche nützlich sind, wenn eine Autorisierungsentscheidung getroffen werden muss, wenn der Benutzer nicht zu einer Rolle hinzugefügt werden kann oder die Entscheidung nicht auf der Zuordnung von Benutzer zu Berechtigung basiert. Das Beispiel eines Facebook-Nutzers verursacht dies. Ein Facebook-Benutzer ist möglicherweise nicht jemand, der einer "Rolle" hinzugefügt wurde. Es handelt sich lediglich um einen Besucher, der über Facebook authentifiziert wurde. Obwohl es nicht genau in RBAC passt, ist es eine Information, über die eine Autorisierungsentscheidung getroffen werden muss.
@CodingSoft hat die Metapher des Nachtclubs in einer früheren Antwort verwendet, die ich erweitern möchte. In dieser Antwort wurde der Führerschein als Beispiel verwendet, das eine Reihe von Ansprüchen enthielt, wobei das Geburtsdatum einen der Ansprüche darstellt und der Wert des DateOfBirth-Anspruchs zum Testen gegen die Autorisierungsregel verwendet wird. Die Regierung, die den Führerschein ausgestellt hat, ist die Behörde, die den Anspruch authentisch macht. In einem Nachtclub-Szenario überprüft der Türsteher an der Tür den Führerschein der Person und stellt sicher, dass er von einer vertrauenswürdigen Behörde ausgestellt wurde, indem er prüft, ob es sich um einen gefälschten Ausweis handelt (dh ein gültiger, von der Regierung ausgestellter Ausweis sein muss). Schauen Sie sich dann das Geburtsdatum an (einer der vielen Ansprüche auf einen Führerschein) und verwenden Sie diesen Wert, um festzustellen, ob die Person alt genug ist, um in den Club einzutreten. Wenn ja,
In Anbetracht dieser Basis möchte ich das jetzt noch weiter ausbauen. Angenommen, das Gebäude, in dem sich der Nachtclub befindet, enthält Büros, Räume, eine Küche, andere Stockwerke, Aufzüge, einen Keller usw., in die nur Mitarbeiter des Clubs eintreten können. Darüber hinaus haben bestimmte Mitarbeiter möglicherweise Zugriff auf bestimmte Orte, die andere Mitarbeiter möglicherweise nicht haben. Beispielsweise kann ein Manager Zugriff auf eine darüber liegende Büroetage haben, auf die andere Mitarbeiter keinen Zugriff haben. In diesem Fall gibt es zwei Rollen. Manager und Mitarbeiter.
Während der Zugang der Besucher zum öffentlichen Nachtclubbereich durch einen einzigen Anspruch, wie oben erläutert, autorisiert ist, benötigen Mitarbeiter per Rolle Zugang zu anderen nicht öffentlichen, eingeschränkten Räumen. Für sie reicht ein Führerschein nicht aus. Was sie brauchen, ist ein Mitarbeiterausweis, den sie scannen, um Türen zu betreten. Irgendwo gibt es ein RBAC-System, das Ausweise in der Manager-Rolle Zugriff auf die oberste Etage und Ausweise in der Mitarbeiterrolle Zugriff auf andere Räume gewährt.
Wenn aus irgendeinem Grund bestimmte Räume von Role hinzugefügt / entfernt werden müssen, kann dies mit RBAC erfolgen, dies ist jedoch nicht für einen Anspruch geeignet.
Berechtigungen in Software
Das Codieren von Rollen in die Anwendung ist eine schlechte Idee. Dadurch wird der Zweck der Rolle in der Anwendung fest codiert. Die Anwendung sollte nur Berechtigungen haben, die sich wie Feature-Flags verhalten. Wenn Feature-Flags durch Konfiguration zugänglich gemacht werden, werden Berechtigungen durch den Benutzersicherheitskontext zugänglich gemacht, der aus der DISTINCT-Sammlung von Berechtigungen abgeleitet wird, die aus allen Rollen erfasst wurden, in die der Benutzer eingefügt wurde. Dies nenne ich "effektive Berechtigungen". Die Anwendung sollte nur ein Menü anzeigenvon möglichen Berechtigungen für Funktionen / Aktionen. Das RBAC-System sollte die Aufgabe übernehmen, diese Berechtigungen über Rollen mit Benutzern zu verbinden. Auf diese Weise gibt es keine feste Codierung von Rollen, und eine Berechtigung ändert sich nur, wenn sie entfernt oder eine neue hinzugefügt wird. Sobald der Software eine Berechtigung hinzugefügt wurde, sollte diese niemals geändert werden. Es sollte nur bei Bedarf entfernt werden (dh wenn eine Funktion in einer neuen Version eingestellt wird) und es können nur neue hinzugefügt werden.
Eine letzte Anmerkung.
Grant vs Deny
Ein robustes RBAC-System und sogar ein CBAC-System sollten zwischen Zuschüssen und Ablehnungen unterscheiden.
Das Hinzufügen einer Berechtigung zu einer Rolle sollte entweder mit einem GRANT oder einem DENY erfolgen. Wenn Berechtigungen aktiviert sind, sollten alle GEWÄHRTEN Berechtigungen zur Benutzerliste der effektiven Berechtigungen hinzugefügt werden. Nach all dem sollte eine Liste der VERWEIGERTEN Berechtigungen das System veranlassen, diese Berechtigungen aus der Liste der effektiven Berechtigungen zu entfernen.
Auf diese Weise können Administratoren die endgültigen Berechtigungen eines Betreffs "optimieren". Es ist am besten, wenn Berechtigungen auch direkt zu Benutzern hinzugefügt werden können. Auf diese Weise können Sie einer Manager-Rolle einen Benutzer hinzufügen, der Zugriff auf alles erhält. Möglicherweise möchten Sie jedoch den Zugriff auf die Toilette der Dame verweigern, da der Benutzer ein Mann ist. Sie fügen also den männlichen Benutzer zur Manager-Rolle hinzu und fügen dem Benutzerobjekt mit DENY eine Berechtigung hinzu, sodass nur der Zimmerzugriff dieser Dame entfernt wird.
Eigentlich wäre dies ein guter Kandidat für einen Anspruch. Wenn der Benutzer den Anspruch "Geschlecht = männlich" hat, hat er in der Manager-Rolle Zugriff auf alle Räume, aber für die Toilette der Dame ist auch der Anspruch "Geschlecht = weiblich" und für die Toilette der Männer der Anspruch "Geschlecht = männlich" erforderlich. Auf diese Weise müsste man männlichen Benutzern keine DENY-Berechtigung konfigurieren, da die Claim-Durchsetzung dies für alle Benutzer mit einer einzigen Berechtigungsregel übernimmt. Es könnte jedoch so oder so gemacht werden.
Der Punkt ist, dass mit der VERWEIGERUNG von Berechtigungen die Verwaltung der Rollen vereinfacht wird, da Ausnahmen implementiert werden können.
Unten ist ein Diagramm, das ich vor langer Zeit erstellt habe und das das RBAC-Modell zeigt. Ich habe keine Grafik für die Ansprüche, aber Sie können sich vorstellen, dass es sich nur um Attribute handelt, die den Benutzern zugeordnet sind, wo immer sie sich befinden. Außerdem zeigt das Diagramm keine Gruppen (ich muss es irgendwann aktualisieren).
Ich hoffe das hilft.
Dies ist ein Diagramm des oben beschriebenen RBAC
Update am 7. April 2019
Basierend auf dem Feedback von @Brent (danke) ... wurden unnötige Verweise auf frühere Antworten entfernt und die ursprüngliche Grundlage der von @CodingSoft bereitgestellten "Nachtclub" -Metapher erläutert, um diese Antwort verständlich zu machen, ohne sie zu haben andere Antworten lesen.