当用户未经过身份验证时,ASP.NET会覆盖重定向中的默认returnto参数

时间:2009-09-01 08:37:47

标签: asp.net forms-authentication

我们正在使用带有角色的表单身份验证来限制对网站的某些页面和区域的访问。当用户未获得授权时,无论是因为他们没有登录还是没有所需的角色,他们都会被重定向到带有返回URL的登录页面。

我们使用授权标签定义web.config中需要的访问权限,如:

<authorization>
    <deny users="?"/>
</authorization>

我们正在处理的Web应用程序使用HttpContext.Current.RewritePath来获取更友好的URL和动态页面。因此,“/ MyPages/MyDocuments.aspx!”的请求被重新写入“/ PageTypes/Library.aspx”或类似的东西。

但是,当应用程序重定向,因为用户没有权限时,将使用ReWritePath而不是Raw URL。

我需要覆盖什么才能使returnto URL成为请求的URL而不是实际的心理路径?

2 个答案:

答案 0 :(得分:1)

根据您运行的IIS(6或7)的版本,答案可能会有所不同,但我怀疑问题是ASP.NET请求管道首先使用表单身份验证对用户进行身份验证,然后运行RewritePath代码/模块,因此覆盖正常的returnto响应。

它们的关键可能是在验证/授权模块之前将重写模块插入管道。如果您使用原始代码而不是HTTP模块在基类global.asax等中执行此操作,请在执行代码之前首先检查用户是否有效/或授权。

ASP.NET Pipeline and Thoughts on Rewriting Vs Routing

答案 1 :(得分:0)

我最终做的是将我的代码移到Application_AuthorizeRequest中,这意味着在请求页面之前对用户进行了身份验证,从而保持原始URL的完整。