zawsze zalecane, że ludzie spojrzeć @ the least privilege repo jak to ma kilka świetnych przykładów wszystkich różnych podejść można podjąć z nową ASP.NET podstawowej uwierzytelniania i autoryzacji paradygmatów .
Czy ten nowy mechanizm polityki może być bardziej dynamiczny?
Tak, w rzeczywistości jest bardziej dynamiczny niż poprzednie koncepcje oparte na rolach. Pozwala na definiowanie zasad, które mogą być oparte na danych. Here to kolejny świetny zasób informacji na ten temat. Można określić, że punkt wejścia API na przykład jest chroniony przez regułę (na przykład), a ta polityka może mieć procedurę obsługi i ten program obsługi może zrobić wszystko, co jest potrzebne, tj. zbadaj bieżący numer User
w kontekście, porównuj roszczenia do wartości w bazie danych, porównuj role, wszystko, co naprawdę. Rozważmy following:
Określ punkt wejścia z Policy
[Authorize(Policy = "DataDrivenExample")]
public IActionResult GetFooBar()
{
// Omitted for brevity...
}
Dodaj zezwolenie z opcjami, które dodają politykę.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("DataDrivenExample",
policy =>
policy.Requirements.Add(new DataDrivenRequirement()));
});
services.AddSingleton<IAuthorizationHandler, DataDrivenHandler>();
}
Następnie określ program obsługi.
public class MinimumAgeHandler : AuthorizationHandler<DataDrivenRequirement>
{
protected override void Handle(AuthorizationContext context,
DataDrivenRequirement requirement)
{
// Do anything here, interact with DB, User, claims, Roles, etc.
// As long as you set either:
// context.Succeed(requirement);
// context.Fail();
}
}
Czy pomysł zupełnie inaczej?
Powinien czuć się bardzo podobny do poprzednich koncepcji, że jesteś przyzwyczajony z auth8 i authz.
Zanim zadałem następne pytanie, myślałem tak jak ty. (http://stackoverflow.com/questions/36445780/how-to-implement-permission-based-access-control-w--asp-net-core). Ale odpowiedź @ Tseng zmieniła moje zdanie. Odpowiedź pokazuje, że "autoryzacja polityki" może być używana dynamicznie. Spójrz na odpowiedź, może być przydatna w twoim przypadku. –
Nie powinieneś już używać "ról" (tak jak wcześniej stosowano w ASP.NET 4.5/MVC 5), zamiast tego użyj twierdzeń. Role nie są zbyt elastyczne i wymagają zmiany kodu za każdym razem, gdy dodajesz nową rolę.Roszczenie to konkretne uprawnienie oparte na funkcji aplikacji, np. "ReadArticle" lub "WriteArticle", "DeleteArticle", "CreateUser" itd. W ten sposób wystarczy dodać zasadę, dodając nową funkcję (np. możliwość zarządzania użytkownikami lub publikowania artykułów). "Rola byłaby po prostu zbiorem roszczeń, które ma użytkownik, kiedy się loguje. Następnie sprawdź to w polityce. – Tseng
Pamiętaj, że nie możesz utworzyć polityki dynamicznej, gdy wcześniej jej nie było. nie może zezwolić użytkownikowi na określenie zasady "w wieku powyżej 18 lat", jeśli w backendie, który ją obsługuje, nie ma kodu (np. "WiekOver18" i obsługa sprawdzająca wiek użytkownika). być tworzone przez osoby niebędące programistami lub osoby, która nie ma dostępu do kodu źródłowego (ponieważ musisz dodać kontrole do tej konkretnej zasady w kodzie), zamiast tworzyć nową politykę, musisz utworzyć rolę istniejące polityki/uprawnienia – Tseng