2016-05-16 13 views
9

Zezwolenie na zasady Net Core, jednak dla mnie wygląda bardzo statycznie. Ponieważ w aplikacji Enterprise często istnieje zapotrzebowanie na nowe role, które będą wymagać nowych zasad (o ile rozumiem) lub jeśli chcesz wdrożyć nowy typ polityki dla konkretnego klienta. Na przykład, jeśli budujemy CMS, który będzie napędzany przez te zasady, będziemy chcieli, aby każdy klient mógł zdefiniować swój własny. Czy ten nowy mechanizm polityki może być bardziej dynamiczny, czy też pomysł jest zupełnie inny?Czy autoryzacja na podstawie zasad może być bardziej dynamiczna?

dzięki :))

+0

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. –

+0

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

+1

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

Odpowiedz

13

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.

+0

Dziękuję, że to jest naprawdę wszystko, co musiałem wiedzieć :))) –

6

Przyjęta odpowiedź jest nadal dość ograniczona. Nie pozwala na wartości dynamiczne na poziomie kontrolera i działania. Jedynym miejscem, w którym można dodać wartość niestandardową, jest wymóg dotyczący dodawania zasady. Czasami potrzebujesz większej kontroli drobnego ziarna nad procesem autoryzacji. Bardzo częstym scenariuszem są zabezpieczenia oparte na uprawnieniach. Każdy kontroler i akcja powinny mieć możliwość określenia uprawnień wymaganych do uzyskania do nich dostępu. Zobacz moją odpowiedź: here, aby uzyskać wydajniejsze rozwiązanie, które pozwala wykorzystać atrybuty niestandardowe do udekorowania kontrolerów i działań za pomocą wszelkich informacji, których potrzebujesz podczas autoryzacji.

+0

https://github.com/aspnet/Security/issues/1359 powinien zająć się tym – thekip

Powiązane problemy