7

我正在尝试创建一个匿名控制器以实现表单身份验证。我将我的 IIS 7 配置为启用了匿名和表单身份验证,并将我的 web.config 设置为拒绝匿名用户。在登录控制器上,我将 [AllowAnonymous] 装饰放在我的控制器(和我的操作)上。

我可以对这组配置进行的唯一操作是登录操作(它返回“登录”视图),我猜 MVC 允许我获取此操作,因为我将其设置为我的网站上的登录 URL .config。

这是我的网络配置配置:

     <authentication mode="Forms">
        <forms loginUrl="~/Login/Login" timeout="2880" />
     </authentication>

所有其他操作都重定向到登录操作。在这组配置上,我无法实现其他重要操作,例如恢复密码、注册等。

我究竟做错了什么?

4

5 回答 5

15

使用具有自定义行为的全局身份验证过滤器,而不是 web.config 中的授权配置(最适合 MVC)

添加全局过滤器

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

然后,[AllowAnonymous] 将起作用,所有其他控制器和操作都需要授权。

于 2013-05-05T09:12:30.930 回答
12

您还可以Authorize在方法中注册过滤器RegisterGlobalFilters

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

然后AllowAnonymous在需要匿名访问的操作方法上使用该属性:

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult RecoverPassword()
    {
     ...
    }
}
于 2013-05-05T09:14:43.107 回答
1

有两种可能的方法。

首先 - 您可以使用 Authorize 属性全局拒绝匿名请求,并使用 AllowAnonymous 属性(这是 MVC4 的新特性)标记这些不需要授权的少数请求。

其次 - 不要全局拒绝,而是使用 Authorize 属性保护您选择的控制器/操作。

于 2013-05-05T09:13:31.323 回答
0

您是否尝试过像下面的示例一样允许对 URL 进行匿名授权

<location path="Login/Login">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

与此类似,您应该设置重置密码/恢复密码/注册等...

于 2013-05-05T09:10:42.347 回答
0

我从 web.config 中删除了以下部分,然后它开始为我工作。

<!--<authorization>
  <deny users="?" />
</authorization>-->
于 2018-05-03T07:20:20.103 回答