Autorisierung in ASP.NET MVC 2 mit web.config-Datei
Ich habe eine ASP.MVC 2 web Seite, und ich habe meine Authentifizierung wie folgt vorgenommen:
FormsAuthentication.SetAuthCookie(user.UserName, false);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, "fooPage" + user.UserName, DateTime.Now, DateTime.Now.AddMinutes(10), false, String.Empty);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
Nun würde ich gerne meine web.config in einer Weise, dass nur wenige Seiten, die nur zugänglich, wenn ein Benutzer authentifiziert ist. Ich habe meine web.config-set:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogIn" timeout="2880"/> //all users can access my web site
</authentication>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
<location path="~/Views/Sales/Index.aspx">
<system.web>
<authorization>
<deny users="?"/> //only authenticated users can access this page
</authorization>
</system.web>
</location>
</configuration>
... aber das nicht Arbeit.
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es wesentlich einfacher, die
[Authorize]
- Attribut auf die controller-action:Können Sie auch das Attribut, auf dem controller, anstatt dass es auf jede Aktion-Methode...
Edit in Antwort auf Ihren Kommentar: ich weiß nicht, dass es möglich ist, zu tun, die nativ mit XML, aber schauen Sie sich http://www.jigar.net/articles/viewhtmlcontent324.aspx
Zweiter edit, ich habe getan, einige der Forschung und Tests, und es ist möglich, verwenden Sie die Standardeinstellung ASP.NET web.config Zeug, verwenden Sie
<location path="~/Sales/Index">
statt<location path="~/Views/Sales/Index.aspx">
ABER
haben Sie, um wirklich wirklich vorsichtig, wenn es mehr als eine URL, könnte landen Sie auf der gleichen Seite, wie
/
,/Home
,/Home/
,/Home/Index
usw - Sie nicht erhalten Sie die Berechtigung die Einstellungen auf allen von Ihnen automatisch. Ich denke, es ist viel sicherer, zu verwenden, etwas, das MVC-bewusst, wie die[Authorize]
Attribut, oder das benutzerdefinierte Schema, das ich im Zusammenhang mit oben.Stoppen. Wenn Sie versuchen, verwenden Sie <location> im Web.config zu sichern, eine MVC-Anwendung sind, sind Sie an das beste Leben schwer machen für sich selbst, und im allerschlimmsten Fall eröffnet ein riesiges security Loch in Ihrer Anwendung.
Als Jon spielt auf, mit [Autorisieren] oder einige andere Sache, die richtig Haken der MVC pipeline (ob deklarative oder programmatische) ist die nur richtige Weg, dies zu tun. Das Produkt-team geht mehr ins detail auf dieses Problem an http://blogs.msdn.com/b/rickandy/archive/2010/08/24/securing-your-mvc-application.aspx.