代码之家  ›  专栏  ›  技术社区  ›  John_

当用户未通过身份验证时,ASP.NET重写重定向中的默认ReturnTo参数

  •  3
  • John_  · 技术社区  · 16 年前

    我们使用带有角色的表单身份验证来限制对网站某些页面和区域的访问。如果用户未获得授权,或者因为他们未登录或没有所需的角色,则会使用返回URL将其重定向到登录页面。

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

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

    我们正在开发的Web应用程序使用httpContext.current.rewritePath来创建更友好的URL和动态页面。所以请求/mypages/mydocuments.aspx!重新写入“/pagetypes/library.aspx”或这些行中的内容。

    但是,当应用程序由于用户没有权限而重定向时,将使用重写路径而不是原始URL。

    我需要重写什么,以便返回URL是请求的URL而不是实际的心理路径?

    2 回复  |  直到 16 年前
        1
  •  1
  •   PortageMonkey    16 年前

    根据您运行的是哪个版本的IIS(6或7),答案可能不同,但是我怀疑问题在于ASP.NET请求管道首先使用表单身份验证对用户进行身份验证,然后运行重写路径代码/模块,从而覆盖了正常的返回响应。

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

    ASP.NET Pipeline and Thoughts on Rewriting Vs Routing

        2
  •  0
  •   John_    16 年前

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