2009-08-30 155 views
19

大部分情况下,我的web应用程序需要身份验证才能执行任何操作。有几页,即主页,我希望人们能够访问而无需进行身份验证。如何使用FormsAuthentication授予对URL的匿名访问权限?

具体,我想以允许对这些网址的匿名访问:

/home 
/default.aspx 

我使用asp.net MVC和FormsAuthentication。这两个网址指向相同的看法:

/home/index.aspx 

这是我在web.config中的当前配置。

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 
<authorization>   
    <deny users="?" />  
</authorization> 

阅读授权标签的文档,它说:“配置Web应用程序的授权,控制客户端访问URL资源。”看起来我应该能够使用授权标签来指定一个url并允许访问。

喜欢的东西:

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

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

<authorization url="/default.aspx">   
    <allow users="?" />  
</authorization> 

<authorization url="/home">   
    <allow users="?" />  
</authorization> 

回答

39

我不想回答我的问题,但因为我做了最后想出来的,我想我会分享知识。

使用位置标记并将正确顺序的允许和拒绝标记。

location标记可用于配置特定的url资源。在我的情况下,我想专门配置一些网址和文件夹。

这一开始并不奏效,因为我没有按正确顺序的允许/拒绝。根据MSDN的说法,“授权模块授予或拒绝访问URL资源,具体取决于发现的第一条访问规则是允许还是拒绝规则。”

在我的情况下,我需要先将所有公共的东西(default.aspx,home,styles,images,scripts)放在一起,然后我对其他东西进行否定。我遗漏了最后一个位置标记的路径。这使它适用于所有文件和子文件夹。

最终的结果,用户可以进入网页,拉起图片和样式,但一切必须登录

这里是我现在的网络配置文件:

<!--AUTHORIZATION AND AUTHENTICATION RULES--> 
    <location path="default.aspx"> 
    <system.web> 

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

    </location> 

    <location path="Home"> 
    <system.web> 

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

    </location> 

    <location path="Styles"> 
    <system.web> 

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

    </location> 

    <location path="Scripts"> 
    <system.web> 

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

    </location> 

    <location path="images"> 
    <system.web> 

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

    </location> 

    <location allowOverride="true"> 
    <system.web> 
     <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" /> 
     </authentication> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <!--END AUTHORIZATION AND AUTHENTICATION RULES--> 
+13

为什么谦逊CW?如果您最终回答自己的问题并发布解决方案,那么您不仅可以帮助自己,还可以帮助其他人。自豪并参加支票。感谢参与。 – 2010-04-29 14:02:17

+0

昨天在搜索了多个合理的答案之后,我确实为此挣扎了大约3个小时。这是似乎使所有的差异和许多感谢突出这一点的顺序。感谢发布。 – nealkernohan 2010-12-07 08:31:33

+0

在MVC 4中,您只需要允许用户使用所需的控制器。没有必要添加对样式/脚本等的特殊访问。已完成的文件夹。同时将您拥有的覆盖内容移到主system.web节点中。 – 2013-10-10 23:29:38