【问题标题】:Allowing access to specific view with parameters in mvc 3 and Forms Authentication允许使用 mvc 3 和 Forms Authentication 中的参数访问特定视图
【发布时间】:2012-06-08 19:45:29
【问题描述】:

我有参数的视图,例如使用参数键重置密码

 public ActionResult ResetPassword(string Email,string Key)
       {
            //Do some thing
            return View();
        }

我正在使用表单身份验证。 我想要的是允许未经授权的用户访问这个视图。

【问题讨论】:

    标签: asp.net-mvc forms-authentication


    【解决方案1】:

    默认情况下,每个人都可以访问控制器操作。所以我想,您已将AuthorizeAttribute 设置得更高,现在您想在特定操作ResetPassword 上抑制它。为此,有属性[AllowAnonymous]

    [AllowAnonymous]
    public ActionResult ResetPassword(string Email,string Key)
    {
        //Do some thing
        return View();
    }
    

    更新: 正如 Muhammad Adeel Zahid 所指出的,这仅适用于版本 4 及更高版本:-/ 对于 MVC 3,您可以使用此处描述的方法:Securing your ASP.NET MVC 3 Application

    【讨论】:

    • 问题是我不允许更改表单身份验证
    【解决方案2】:

    解决办法是在web.Config中添加location,设置allowOverride="false" like

    <location path="reset.password" allowOverride="false">    
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
      </location>
    

    这解决了我的问题。谢谢大家:)

    【讨论】:

    • 但我仍然建议不要在 Asp.net MVC 中这样做,因为这样的路径实际上并不存在于磁盘上,这可能会非常令人困惑并且路由可能会随时更改,使此设置过时。使用AuthorizeAttribute 将在路由更改时继续工作,因为它直接附加到控制器操作。
    • 一个 MS 参考,上面写着 web.config is not a place to secure your Asp.net MVC application。第一句话告诉你......还有其他 Stackoverflow answer 由一个受信任的人说同样的话。
    【解决方案3】:

    使用AuthorizeAttribute

    这将使只有经过身份验证的用户有权执行此特定控制器操作成为可能。见MSDN documentation

    [Authorize]
    public ActionResult ResetPassword(string Email,string Key)
    {
        //Do some thing
        return View();
    }
    

    注意:只要填充了 PrincipalUser 对象实例,这适用于您可能正在使用的任何身份验证方法(即使是自定义方法,如果编写得当)。默认的开箱即用身份验证方法会填充它们,如果您使用一些自定义身份验证方法,请确保它们被填充。

    始终安全 - 选择退出

    但显然您的整个控制器或整个应用程序都由AuthorizeAttribute 保护。在这种情况下,您应该选择退出特定的控制器操作。正如 Juraj 在 MVC 4 中所说,您应该简单地使用 AllowAnonymousAttribute,但在旧版本中,您可以编写自己的 instructed on this page

    这是您应该遵循的 Microsoft 首选方​​法。

    【讨论】:

    • 问题是我不允许更改表单身份验证,所以我必须使用表单身份验证来解决问题
    • @HalaAly:只要填充了PrincipalUser 对象,您使用哪种身份验证并不重要。适用于 Windows 身份验证、表单身份验证或您可能正在使用的任何其他自定义身份验证技术。主要思想是这适用于表单身份验证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多