在大多数情况下,我的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-->