Asp.net mvc 4 如何在ASP.NET MVC 4中使用SimpleMembershipProvider拒绝所有经过身份验证的用户访问

Asp.net mvc 4 如何在ASP.NET MVC 4中使用SimpleMembershipProvider拒绝所有经过身份验证的用户访问,asp.net-mvc-4,authentication,web-config,simplemembership,Asp.net Mvc 4,Authentication,Web Config,Simplemembership,我正在使用SimpleMembershipProvider开发ASP.NET MVC 4应用程序。事实证明,所有内容都需要身份验证,我的同事告诉我,添加以下内容: <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="15" slidingExpiration="true" enableCrossAppRedirects="false" protection="All" />

我正在使用
SimpleMembershipProvider
开发
ASP.NET MVC 4
应用程序。事实证明,所有内容都需要身份验证,我的同事告诉我,添加以下内容:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="15" slidingExpiration="true" enableCrossAppRedirects="false" protection="All" />
</authentication>
然后我被重定向到登录页面

我找不到关于
中使用的不同属性以及它们可以采用的不同值的解释,但似乎合乎逻辑的是,应该使所有控制器表现为具有
[Authorize]
属性的控制器是
protection=“all”
那么我是不是用错了它,或者该属性不能与
SingleMembershipProvider
或其他东西一起使用

但似乎合乎逻辑的是,应该让所有控制器 表现得像他们有[Authorize]属性is protection=“All”

不,一点也不。早在ASP.NET MVC出现在微软的设计团队中之前,MVC就已经存在于ASP.NET中了

protection=“all”
只需为表单身份验证票证指定隐私和完整性。这将导致使用machineKey元素上指定的算法对身份验证票证进行加密,并使用machineKey元素上指定的哈希算法对身份验证票证进行签名

现在,如果要保护应用程序中的所有控制器,可以使用
[Authorize]
属性对其进行修饰,或将其定义为全局操作筛选器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}

当然,如果应用程序中的所有控制器操作都需要经过身份验证的用户才能访问它们,那么匿名用户就无法真正进行身份验证。您可能希望排除将执行实际身份验证的AccountController。这可以通过使用
[AllowAnonymous]
属性对其进行装饰来实现。

感谢您的解释,您会推荐哪种选项,似乎如果我希望整个内容仅针对经过身份验证的用户,新的过滤器是更好的方法?是的,默认情况下它是公共操作结果登录(LoginModel模型,string returnUrl)是的,在这种情况下,全局授权过滤器似乎是一种很好的方法。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}