2011-07-04 21 views
10

wiem, że mogę ograniczyć dostęp do 3 aplikacji ASP.NET MVC za pomocą znacznika autoryzacji w web.configatrybut Autoryzuj vs węzła zezwolenia w web.config

 
    <authentication mode="Windows"></authentication> 
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" /> 
    <authorization> 
     <allow roles="MyDomain\MyGroup" /> 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 

lub zdobienia klasę bazową kontroler ze związkiem Atrybut [Autoryzuj()] (lub nawet z niestandardowym atrybutem autoryzacji)

[AdminOnly] 
public class BaseController : Controller{} 

Pytanie brzmi: czy są to rozwiązania alternatywne i równoważne? Czy zawsze powinienem stosować jedno podejście, a nie drugie? Których elementów należy pamiętać?

Odpowiedz

10

wiem, że mogę ograniczyć dostęp do 3 aplikacji ASP.NET MVC za pomocą znacznika autoryzacji w web.config

Nie, nie używaj tego w ASP.NET MVC.

Pytanie brzmi: czy są to rozwiązania alternatywne i równoważne?

Nie, nie są alternatywne. Nie powinieneś używać znacznika <authorization> w web.config w aplikacji ASP.NET MVC, ponieważ jest on oparty na ścieżkach, podczas gdy MVC działa z akcjami i trasami kontrolera. Prawidłowy sposób autoryzacji w środowisku ASP.NET MVC jest przy użyciu atrybutu [Authorize].

+0

Rozsądne. Proszę, pozwól mi zrozumieć lepiej: jeśli nie zamierzam używać żadnego tagu (tj. Ograniczając dostęp do całej aplikacji), dlaczego i jak zdefiniowanie autoryzacji w pliku web.config może być luką w zabezpieczeniach? –

+0

@Arialdo Martini, w znaczniku lokalizacji określasz ścieżkę: na przykład możesz ograniczyć dostęp do '/ admin'. Ale w MVC masz trasy. Te trasy są zdefiniowane w Global.asax. Odzwierciedlają one kontrolerów i działania. Tak więc należy kontrolować twoich kontrolerów i działania, a nie jakieś nieistniejące wirtualne ścieżki. –

+1

tak, jasne. Co się stanie, jeśli ** nie użyję ** żadnego tagu lokalizacji i po prostu ustawiam autoryzacje na ** całą ** aplikację? Mam na myśli, co jeśli używam dokładnie web.config zgłoszonego w pytaniu, które nie zgłasza żadnego adresu URL ani żadnej trasy? Czy to może oznaczać lukę bezpieczeństwa? –

Powiązane problemy