2014-04-03 22 views
12

Podając określony zestaw uprawnień, np. EditPage, CreateProject, ModifyUser, obecnie przyglądam się dwóm różnym sposobom tworzenia niestandardowych typów oświadczeń w celu modelowania tego zachowania. Mogę znaleźć w Internecie niewiele informacji na temat najlepszego sposobu na zrobienie tego, mając nadzieję na opinie na temat tego, jak to zrobiłeś we własnych systemach.Najważniejsze wskazówki dotyczące tworzenia niestandardowych typów roszczeń

Pierwsze podejście mam uważany jest użycie „działanie” typu roszczenia, z konkretnym działaniem określonej przez wartość roszczenia:

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") 
} 

Drugim sposobem jest użycie samego rodzaju roszczenia aby zdefiniować wykonywaną akcję, wartość nie jest używana. Jest to jak styl bezpieczeństwa "PossessProperty", w którym tak długo, jak użytkownik ma typ roszczenia, może wykonać akcję.

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", "") 
} 

Należy również pamiętać, w rodzaju roszczenia powyżej podaję „projekt” dyskryminator tak, że można rozróżnić użytkownika, który można edytować stronę w projekcie A, ale nie projektu B.

Mamy "Planuje również przechowywanie wszystkich tych niestandardowych roszczeń w centralnej bazie danych" Autoryzacja ", więc wymagana jest wyjątkowość.

Wszelkie przemyślenia lub uwagi będą mile widziane.

Odpowiedz

9

Cóż - nie podałeś więcej szczegółów na temat swojego zamiaru - ale jeśli masz zamiar uczynić te roszczenia częścią tożsamości użytkownika - jest to wyraźnie anty-wzór.

Żądania opisują tożsamość użytkownika (która może zawierać gruboziarniste dane autoryzacyjne, takie jak role). Aby uzyskać dokładniejsze decyzje dotyczące autoryzacji, użyj czegoś takiego jak ClaimsAuthorizationManager w .NET.

W tym momencie rozciągliwości dokonaniu świadomej decyzji w oparciu o

a) tożsamość użytkownik b) zasobu użytkownik próbuje uzyskać dostęp do c) operacja użytkownik próbuje zrobić na zasób

Innymi słowy - roszczenia są podstawą decyzji o autoryzacji, a nie bezpośrednią odpowiedzią.

+0

Dzięki, miałem nadzieję, że masz zamiar odpowiedzieć na to. Bardzo podobały mi się twoje teledyski Pluralsight. W rzeczywistości używam ClaimsAuthorizationManager, ale muszę jeszcze wdrożyć zasady. Wymaganiem jest posiadanie bardzo drobnoziarnistych zabezpieczeń, więc użytkownicy mają określone uprawnienia do wykonywania określonych czynności, np. przesyłaj obrazy, modyfikuj strony itp. Myślałem, że konkretne prawa/działania/uprawnienia zostaną zamodelowane jako indywidualne roszczenia. Ale mówisz, że to anty-wzór. Czy ta cała drobnoziarnista ochrona jest anty-wzorem? Jestem teraz jeszcze bardziej zdezorientowany. – mikesigs

+1

Nie, wcale nie;) Po prostu nie rób tego wszystkiego, co jest częścią Zastrzeżenia. – leastprivilege

+0

Tak więc roszczenia "działania" nie są już roszczeniami. Nie są przechowywane przy użyciu ClaimsPrincipal podczas transformacji roszczeń. Ale raczej Menedżer autoryzacji musiałby sprawdzić konkretne uprawnienia za pomocą jakiegoś wyszukiwania usługi/db db? Miałem nadzieję na posiadanie statycznego zestawu zasad, ale to nie zadziała z tym modelem. – mikesigs

Powiązane problemy