在大多数情况下,我的webapp需要身份验证才能做任何事情。有几页,即首页,我希望人们能够访问而不进行身份验证。
具体来说,我想允许匿名访问这些网址:
/home /default.aspx
我使用asp.net MVC和FormsAuthentication。两个url都指向相同的视图:
/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>
解决方法
我讨厌回答我自己的问题,但是由于我最终弄清楚了,我想我会分享知识。
使用位置标签,并按照正确的顺序放置allow和deny标签。
位置标签可用于配置特定的网址资源。在我的情况下,我想特别配置几个URL和文件夹。
最初没有工作,因为我没有按正确的顺序允许/拒绝。根据MSDN,“授权模块根据发现的第一个访问规则是允许还是拒绝规则,授予或拒绝访问URL资源。”
在我的情况下,我需要把所有的公共资料放在第一位(default.aspx,home,styles,图像,脚本),然后我把所有的东西都拒绝。我遗漏了最后一个位置标签上的路径。这使它适用于所有文件和子文件夹。
这是我现在的web配置文件:
<!--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-->