【问题标题】:MVC3 <authentication> and <authorization> inside a <location> attribute<location> 属性中的 MVC3 <authentication> 和 <authorization>
【发布时间】:2012-04-17 10:13:09
【问题描述】:

我是 .NET 和 MVC3 的新手,我目前正在将一个长期存在的经典 ASP 站点转换为 MVC3 应用程序站点。

同一个站点有四个区域,我需要独特的登录页面以及不同级别的访问和安全性。这意味着我不想在我的 web.config 文件中使用默认代码:

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

相反,我希望能够在我的应用程序中设置区域,然后使用&lt;location&gt; 属性为每个区域设置身份验证和授权规则。比如:

<location path="AreaName">
 <system.web>
  <authentication mode="Forms">
    <forms loginUrl="~/AreaName/Login" timeout="15" />
  </authentication>
  <authorization>
    <deny users="?"/>
  </authorization>
 </system.web>
</location>

如果我删除这三行:

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

然后,当我尝试访问路径“AreaName”中的任何视图时,我首先会被重定向回 ~/Account/LogOn。如果我把这三行放回去,我会得到以下错误:

解析器错误消息:在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的部分是错误的。 此错误可能是由未配置虚拟目录引起的 作为 IIS 中的应用程序。

我已针对此错误进行了搜索,但似乎没有任何建议适用。我已经看到了一个答案,其中逻辑应该放在控制器上而不是 Web 配置中,但这些方法仍然暗示您将为整个站点使用默认的 &lt;authentication&gt;

我不明白为什么我不能在 &lt;location&gt; 中拥有 &lt;authentication&gt; 属性。对此的任何帮助将不胜感激。

如果我对这个问题的任何措辞有误,我深表歉意。

【问题讨论】:

  • 这似乎是因为在 ASP.NET 框架的 Machine.config 文件中,为身份验证部分设置了allowDefinition="MachineToApplication" 的设置。所以我想我的问题变成了,有没有办法覆盖 machine.config 中的设置并在我的应用程序 web.config 文件中将其设置为 allowDefinition="Everywhere"

标签: visual-studio-2010 asp.net-mvc-3 forms-authentication


【解决方案1】:

您可能需要一个自定义成员资格提供程序和一个自定义角色提供程序(如果需要)...这是一个示例帖子 Custom membership providers in ASP.NET...如果您关心的是访问级别,您将需要使用自定义角色提供程序...

【讨论】:

  • 谢谢,但正如我在问题中所说,我对让所有内容都通过单个登录页面汇集不感兴趣 - 我希望最终能够为每个区域拥有唯一的登录页面受到保护。最后一步仍然显示将[Authorize] 指令应用于控制器中的各个操作。
  • 好的...我的下一个问题是为什么您需要有多个登录页面...当您可以拥有会员角色...例如,如果您有一个管理区域...您需要没有单独的管理员登录页面...您仍然可以使用相同的登录页面...但是这次您将管理员角色添加到用户身份...并且您的授权属性看起来像 [Authorize(Roles = RoleNames.Admin)]...这样您就可以使用一个登录页面...
  • 我不是从头开始构建网站 - 这四个区域都有自己的用户数据库,其中三个区域内有用户和管理员可以访问的功能 - 一个区域的管理员不是第二个区域或第三个区域的管理员。这些数据库不能合并或更改,我也没有奢侈的废弃它们并从一个全新的数据库开始。为什么我不能只在位置级别使用唯一授权?
猜你喜欢
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多