【问题标题】:authorization in MVC projectMVC项目中的授权
【发布时间】:2013-02-13 11:20:19
【问题描述】:

我在 MVC 项目中有登录页面,我创建了授权配置。

  <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"  defaultUrl="~/Home/Index"/>
    </authentication>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

如何在注册页面访问?

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    根据您使用的 MVC 版本,我现在在 MVC3/4 中看到的常见做法是通过添加 Authorize() 作为全局过滤器来限制对特定操作的访问,而不是限制对所有操作的访问然后使用AllowAnonymous() 属性授予对一些选择操作的访问权限,以充当不需要保护的操作的白名单。 (例如登录、注册等)。

    global.asax

    protected void Application_Start()
    {
        filters.Add(new AuthorizeAttribute());
    }
    

    AccountsController.cs

    [AllowAnonymous]
    public ActionResult Login()
    {
        //Perform login...
    }
    

    那么你的 web.config 就只有这个

    <authorization>
        <allow users="*" />
    </authorization>
    

    【讨论】:

    • 这是windows授权?
    • 有可能。但这只是确定谁可以访问什么的授权。用户可能仍使用 Windows 身份验证进行身份验证。这个词有细微的差别,但两者是不同的。身份验证是证明您是谁(登录)的行为,仅此而已。授权是决定你能做什么的部分。这个问题只针对授权,而身份验证可以是 Windows、Forms 或其他一些外部服务,如 OpenAuth。
    【解决方案2】:

    默认你应该去Account控制器的Register()操作方法

    // GET:/帐户/注册

    根据您的 web.config:尝试在&lt;system.web&gt; 标记之前将其添加到 web.config。

     <location allowOverride="true" path="Account/Register">
        <system.web>
          <authorization>
            <allow users="?" />
            <deny users="*" />
          </authorization>
        </system.web>
      </location>
    

    【讨论】:

    • 在新创建的项目中它对我来说很好,你遇到了什么错误,或者不正确的行为?
    【解决方案3】:

    A +1 给 Nick Albrecht,但我发现“过滤器”有歧义,所以我不得不进一步挖掘。

    实际上,看起来 filters.Add(new AuthorizeAttribute()); 此代码属于 App_Start

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

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters) 在 Application_Start 中被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2012-10-28
      • 2020-01-05
      相关资源
      最近更新 更多