我正在使用一些重写的URL进行快速沙箱测试(示例来自Scott Guthrie的博客)和表单身份验证/授权。
我的设置非常简单。
~/View/(\d{1,6}) => ~/Public/View.aspx?ContentID=$1
和
~/Buy/(\d{1,6}) => ~/Private/Purchase.aspx?ContentID=$1
我已经确认网址重写正在通过浏览到以下每个单独
来工作接下来,我开始为Web.Config中的这两个目录启用表单身份验证/授权。设置如下
<location path="Private">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
<location path="Public">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
当我浏览到2个原始URL(.aspx的)时,这非常有效。 但是当我浏览URL重写版本时根本不会触发。
我试图单独为<location>
添加Buy
个部分,但这仍然无法导致授权/身份验证模块启动。
可能这是因为它没有将这些URL视为ASPX资源......我可以通过使重写器规则查找来解决这个问题
<LookFor>~/Buy/(\d{1,6})\.aspx</LookFor>
即。迫使重写的版本在最后有一个ASPX,但这看起来很难看。 无论如何都要让Auth处理程序为任何URL类型触发,无论扩展名(或缺少扩展名)
答案 0 :(得分:2)
要使用内置身份验证,您必须根据原始“原始”网址或重写的网址来决定是否要进行身份验证。看起来好像您正在使用的URL重写器已在执行身份验证后连接到事件,这就是为什么只遵循“公共”和“私有”文件夹规则的原因。如果要根据重写的URL进行身份验证,则必须使用连接到早期事件(例如BeginRequest)的重写器,以及使用重写的URL更新web.config。
或者,您可以插入自己的身份验证提供程序并执行诸如检查重写和原始URL之类的奇特内容,但这对于沙盒测试站点来说可能有点过分。
请参阅此文章以获取更多信息:
http://msdn.microsoft.com/en-us/library/ms972974.aspx
我希望这会有所帮助。
答案 1 :(得分:0)
在ASP.NET 4.0中(我相信它在3.5 SP1中),包含了一个新的路由功能。使用此路由功能的好处是现在可以直接在ASP.NET中支持它,因此您可以指定在执行路由时,它应该遵守实际.ASPX文件的授权设置。
所以我建议您调查是否可以实现此路由功能。
答案 2 :(得分:0)
不清楚你使用的url重写库是什么,但从我认为它可能是urlrewriter.net的东西看起来然而我看不到任何标签?
答案 3 :(得分:0)
尝试对所有请求启用表单身份验证和授权。默认情况下,它仅对.aspx等asp.net请求启用。 可以在IIS(7)中完成,也可以直接在webserver / modules部分的web.config中完成
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition=""/>
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="" />
</modules>
</system.webServer>