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

3

我正在进行一个快速沙盒测试,测试内容涉及Rewritten URLs(示例来自Scott Guthrie的博客)和表单身份验证/授权。

我的设置非常简单。

~/View/(\d{1,6})      =>      ~/Public/View.aspx?ContentID=$1

AND

~/Buy/(\d{1,6})       =>      ~/Private/Purchase.aspx?ContentID=$1

我已确认URL重写功能可通过分别浏览以下网址来使用: 接下来,我在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> 

当我浏览到这两个原始网址(.aspx文件)时,它完美地运行,但是当我浏览到URL重写版本时,它根本没有触发。

我尝试为Buy分别添加<location>部分,但这仍然无法引起授权/身份验证模块的启动。

可能是因为它没有将这些URL视为ASPX资源...我可以通过使重写规则查找来解决此问题。

    <LookFor>~/Buy/(\d{1,6})\.aspx</LookFor>

即强制重写版本以ASPX结尾,但这似乎很丑陋。 是否有任何方法可以使身份验证处理程序对任何url类型都触发,而不考虑扩展名(或缺少扩展名)?


Scott Guthrie概述了4种不同的方法,你正在使用哪一种?http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx - MyItchyChin
4个回答

2
要使用内置的身份验证,您需要决定是基于原始的“原始” URL 还是基于重写后的 URL 进行认证。看起来,您正在使用的 URL 重写器已连接到身份验证已执行之后的事件,这就是为什么只会遵循“公共”和“私有”文件夹规则的原因。如果您想基于重写后的 URL 进行身份验证,则必须使用一个连接到较早事件(如 BeginRequest)的重写器,并更新您的 web.config 以包含重写后的 URL。
另外,您可以插入自己的身份验证提供程序,并进行一些花哨的操作,比如检查重写和原始 URL,但这对于一个沙盒测试站点来说可能有些过度设计了。
请参阅此文章以获取更多信息:

http://msdn.microsoft.com/en-us/library/ms972974.aspx

我希望这有所帮助。

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>

0
在ASP.NET 4.0(我相信3.5 SP1版本中也有)中,包含了一个新的路由功能。使用这个路由功能的好处是它直接被支持在ASP.NET内部,因此你可以指定当执行一个路由时,它将遵循实际的.ASPX文件的授权设置。
所以我建议你调查一下是否可以实现这个路由功能。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接