使用带有重写URL的表单身份验证/授权

时间:2009-06-02 15:04:14

标签: asp.net url-rewriting forms-authentication authorization

我正在使用一些重写的​​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类型触发,无论扩展名(或缺少扩展名)

4 个答案:

答案 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>