2014-04-03 18 views
12

Gegeben ein bestimmter Satz von Berechtigungen, z. EditPage, CreateProject, ModifyUser, Ich untersuche derzeit zwei verschiedene Möglichkeiten zur Erstellung einiger benutzerdefinierter Ansprüche, um dieses Verhalten zu modellieren. Ich kann online nur wenige Informationen darüber finden, wie dies am besten funktioniert, und ich hoffe auf ein Feedback darüber, wie Sie das in Ihren eigenen Systemen getan haben.Best Practices zum Erstellen benutzerdefinierter Anspruchstypen

Der erste Ansatz, den ich in Betracht gezogen habe, ist eine „Aktion“ Anspruchstyp zu verwenden, mit der spezifischen Aktion der Wert der Forderung festgelegt:

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/action", "EditPage"), 
    new Claim("http://schemas.company.com/claims/project/action", "CreateProject"), 
    new Claim("http://schemas.company.com/claims/project/action", "ModifyUser") 
} 

Der zweite Ansatz ist die Fallart selbst zu verwenden, Um die ausgeführte Aktion zu definieren, wird der Wert nicht verwendet. Dies ist wie ein "PossessProperty" -Sicherheits-Stil. Solange der Benutzer den Anspruchstyp hat, kann er die Aktion ausführen.

var claims = new [] 
{ 
    new Claim("http://schemas.company.com/claims/project/editpage", ""), 
    new Claim("http://schemas.company.com/claims/project/createproject", ""), 
    new Claim("http://schemas.company.com/claims/project/modifyuser", "") 
} 

Beachten Sie auch, in den Anspruchstypen I oben ein „Projekt“ Scheider enthalten haben, so dass ich zwischen einem Benutzer unterscheiden kann, die eine Seite im Projekt A bearbeiten kann, aber nicht Projekt B.

Wir Außerdem planen wir, alle diese benutzerdefinierten Ansprüche in einer zentralen "Autorisierungs" -Datenbank zu speichern, so dass die Eindeutigkeit erforderlich ist.

Alle Gedanken oder Rückmeldungen würden sehr geschätzt werden.

Antwort

9

Nun - Sie haben nicht mehr Details über Ihre Absicht angegeben - aber wenn Sie planen, diese Ansprüche Teil der Identität des Benutzers zu machen - das ist eindeutig ein Anti-Muster.

Ansprüche beschreiben die Identität des Benutzers (die grobkörnige Autorisierungsdaten wie Rollen enthalten kann). Um feinkörnigere Autorisierungsentscheidungen zu treffen, verwenden Sie etwas wie den ClaimsAuthorizationManager in .NET.

In diesem Erweiterungspunkt machen Sie eine fundierte Entscheidung basierend auf

a) die Identität des Benutzers b) die Ressource der Benutzer c) den Betrieb der Benutzer auf das zu tun versucht, zuzugreifen versucht, Ressource

Also mit anderen Worten - Ansprüche sind die Eingabe für Ihre Autorisierungsentscheidungen, nicht die direkte Antwort.

+0

Danke, ich hatte gehofft, dass du darauf antworten würdest. Ich habe deine Pluralsight-Videos sehr genossen. Ich benutze tatsächlich den ClaimsAuthorizationManager, muss aber noch mit der Implementierung der Richtlinien beginnen. Die Anforderung besteht darin, eine sehr feinkörnige Sicherheit zu haben, so dass Benutzern spezifische Rechte gewährt werden, um spezifische Aktionen auszuführen, z. Bilder hochladen, Seiten ändern usw. Ich dachte, dass die spezifischen Rechte/Aktionen/Berechtigungen jeweils als individuelle Ansprüche modelliert werden. Aber du sagst, das ist ein Anti-Muster. Ist diese ganze feinkörnige Sicherheit ein Anti-Pattern? Ich bin jetzt noch mehr verwirrt. – mikesigs

+1

Nein überhaupt nicht;) Machen Sie nicht alle diese Ansprüche Teil des ClaimsPrincipal. – leastprivilege

+0

Also die "action" Ansprüche werden dann nicht mehr erhoben. Sie werden nicht mit dem ClaimsPrincipal während der Schadentransformation gespeichert. Stattdessen müsste der Autorisierungs-Manager die spezifischen Berechtigungen über einen Serviceaufruf/db-Lookup überprüfen. Ich hatte gehofft, eine statische Reihe von Richtlinien zu haben, aber das wird mit diesem Modell nicht funktionieren. – mikesigs

Verwandte Themen