在大多数情况下,我的webapp需要身份验证才能执行任何操作。有一些页面,即主页,我希望人们无需验证即可访问。
具体来说,我想允许匿名访问这些网址:
/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>
答案 0 :(得分:41)
我不想回答我自己的问题,但是因为我最终搞清楚了,我想我会分享知识。
使用位置标记并按正确的顺序放置允许和拒绝标记。
location标记可用于配置特定的url资源。在我的情况下,我想特别配置一些网址和文件夹。
这起初没有用,因为我没有正确的顺序允许/拒绝。根据MSDN,“授权模块授予或拒绝访问URL资源,具体取决于找到的第一个访问规则是允许还是拒绝规则。”
在我的情况下,我需要首先放置所有公共内容(default.aspx,home,样式,图像,脚本),然后我拒绝其他所有内容。我在最后一个位置标签上遗漏了路径。这使它适用于所有文件和子文件夹。
最终结果,用户可以访问主页,提取图像和样式,但其他一切必须登录。
现在是我的网络配置文件:
<!--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-->