【问题标题】:Forms Authentication & authorization MVC 4表单身份验证和授权 MVC 4
【发布时间】:2013-05-05 08:58:00
【问题描述】:

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

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

这是我的网络配置配置:

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

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

我做错了什么?

【问题讨论】:

  • 您不能全局拒绝 - 密码恢复或注册必须匿名访问。
  • 那么我需要改变什么?如果我允许匿名访问,那么所有站点都可以访问,并且 MVC 不会将未经身份验证的用户重定向到登录操作。

标签: c# asp.net-mvc-4 form-authentication


【解决方案1】:

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

添加全局过滤器

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

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

【讨论】:

  • 你能举个例子吗?
  • 谢谢!值得一提:添加自动过滤器后,您需要(就像我一样)允许匿名访问您的网站
【解决方案2】:

你也可以在RegisterGlobalFilters方法中注册Authorize过滤器:

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

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

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult RecoverPassword()
    {
     ...
    }
}

【讨论】:

  • 谢谢,hVostt 比你早 2 分钟
  • 没问题。很高兴你得到你的答案:)
【解决方案3】:

有两种可能的方法。

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

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

【讨论】:

  • 这不准确,关于您的第一种方法:如果您拒绝匿名请求并且未添加授权过滤器,则除了登录操作和属性 AllowAnonymous 之外,您将无法执行任何操作MVC 不会考虑
  • 我说的不够清楚,拒绝当然应该通过授权来完成。我希望编辑后的版本清晰。谢谢。
【解决方案4】:

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

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

与此类似,您应该设置 ResetPassword/Restore password/Register 等...

【讨论】:

  • 装饰效果不一样?
【解决方案5】:

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

<!--<authorization>
  <deny users="?" />
</authorization>-->

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多