2009-08-29 15 views
27

W jaki sposób znacznik Authorize określa, czy użytkownik jest autoryzowany, czy nie?Jak działa tag Authorize? - ASP.NET MVC

Podobno jeśli użytkownik się zaloguje i spróbuje przejść do widoku z tagiem Autoryzuj. W jaki sposób określa, czy użytkownik jest autoryzowany, czy nie? Czy robi zapytanie do bazy danych i sprawdza?

A może przejdą do widoku z autoryzacją roli? Czy wysyła zapytanie do tabeli ról członkostwa?

Zastanawiam się, ponieważ mam to, co tabele członkostwa ASP.NET uważa zduplikowane nazwy użytkownika. Używam poważnych pól, aby określić, który użytkownik jest tym, co pozwala użytkownikom na posiadanie tego samego duplikatu nazwy użytkownika, ale nadal jest unikalny w mojej bazie danych.

To spowodowało, że musiałem napisać niestandardowe metody dla wielu elementów członkowstwa .NET, ponieważ wszystkie używały "userName" do wyszukiwania zamiast używania UserId.

Więc teraz zastanawiam się, czy może tak być w przypadku znacznika Authorize. Ponieważ nie mam pojęcia, jak to działa i jakbym nie używał członkostwa .NET, nie miałbym pojęcia, jak to określić.

+0

Nie mam bezpośredniej odpowiedzi na twoje pytanie, ale pamiętaj, że ASP.NET MVC jest open source i możesz to sprawdzić samodzielnie. Zakładam, że po prostu pyta się o dostawcę członkostwa. – JoshJordan

Odpowiedz

24

Znacznik Authorize wykorzystuje wszystkie wbudowane kontrole członkowskie z ASP.NET. Radzenie sobie z własnym znacznikiem jest BARDZO proste. Na przykład:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

Następnie można użyć tagu [MyAuthorize] który będzie używać niestandardowych kontroli.

+0

Jak działa weryfikacja członkostwa? Czy używa on userName lub UerId? – chobo2

+0

Nie jestem w 100% pewny, ale myślę, że głównie sprawdza httpContext.User.Identity.IsAuthenticated i zwraca jego wartość, ale wiem, że ma również możliwość sprawdzania ról. – Kelsey

+0

hmm Nie wiem, wydaje się nie działać nadal widzę stronę. Po prostu podaje adres URL w moim adresie URL i tym podobne. – chobo2

14

ControllerActionInvoker analizuje atrybut i wywołuje na nim OnAuthorization(), gdy nadchodzi czas sprawdzania poświadczeń.

Metoda AuthorizationAttribute.OnAuthorization() zasadniczo sprawdza, czy User.Identity.IsAuthenticated jest prawdziwa, czy też nie. To po prostu rysuje funkcjonalność FormsAuthentication lub jakikolwiek inny schemat uwierzytelniania, którego używasz.

Powiązane problemy