在大多数情况下,我的web应用程序需要验证做任何事情。 有几个页面,即主页,我希望人们能够访问而不认证。
具体来说,我想以允许对这些网址的匿名访问:
/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>
我不想回答我的问题,但因为我做了最后想出来的,我想我会分享知识。
使用位置标记,把允许和拒绝标签以正确的顺序。
位置标签可用于配置特定的URL资源。 在我的情况,我想配置一些URL和文件夹明确。
这并没有在第一工作,因为我没有足够的允许/按正确的顺序否认。 根据MSDN,“授权模块允许或拒绝访问根据找到的第一个访问规则是否为允许或拒绝规则URL资源。”
在我来说,我需要首先把我所有的公物(Default.aspx的,家庭,风格,图片,脚本),然后我把否认一切。 我离开了在最后一个位置标记的路径。 这使得它适用于所有文件和子文件夹。
最终的结果,用户可以进入网页,拉起图片和样式,但一切必须登录。
这是我的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-->