如何配置ASP.net表单身份验证以仅拒绝特定的URL和子URL?

时间:2011-05-07 11:25:05

标签: asp.net asp.net-mvc-3 forms-authentication

我正在使用ASP.NET4和MVC3。我想将我的网站配置为以下列方式使用表单身份验证:

  • 未经过身份验证的用户应该可以访问所有内容(例如/,/ home,/ freebies)......
  • ...除了/ paidServices下的任何内容(即/ paidServices / fancy,/ paidServices)

如何在我的web.config文件中配置它?当用户点击根URL(/)时,我当前的配置总是进入登录页面,但不应该。如果用户尝试访问/ paidServices网址,它应该只进入登录页面。

我的配置如下:

<configuration>
    <system.web>
        <authentication mode="Forms">
          <forms loginUrl="~/Account/LogOn" path="/" timeout="2880" />
        </authentication>
        <authorization>
          <allow users="*"/>
        </authorization>
    </system.web>

    <location path="~/paidServices">
        <system.web>
            <authorization>
                <deny users="?"/>
            </authorization>
        </system.web>
    </location>

    ... etc ...
</configuration>

我做错了什么?事实上,我使用ASP.NET MVC使这更复杂吗?

2 个答案:

答案 0 :(得分:2)

最好在MVC中使用Authorize属性。这些可以应用于整个控制器或仅应用于单个控制器操作。

例如:

[Authorize]
public class paidServicesController
{
 ....

答案 1 :(得分:1)

误报。配置问题是正确的。我在MVC路由配置中省略了一个URL,因此默认URL(/)转到安全部分,Logon表单按预期显示。

Phil Haack的Route Debugger帮助查明了问题:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx