【问题标题】:Forms Authentication - Redirect Back to Original Domain表单身份验证 - 重定向回原始域
【发布时间】:2013-03-08 20:53:49
【问题描述】:

例子:

应用程序 = https://test2.mytest.com/MyApplication/Download.aspx

应用程序在 web.config 中启用了表单身份验证:

<authentication mode="Forms">
  <forms loginUrl="https://test.mytest.com/Login/" name=".ASPXAUTH"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

访问应用程序时,它会正确重定向到登录页面:
https://test.mytest.com/Login/?ReturnUrl=%2fMyApplication%2fDownload.aspx

但是,成功登录后会转到:
https://test.mytest.com/MyApplication/Download.aspx
而不是
https://test2.mytest.com/MyApplication/Download.aspx

它使用的是登录应用程序所在的子域 (test.mytest.com),而不是原始请求的子域 (test2.mytest.com)。 无论如何,表单身份验证是否重定向回原始请求子域,而不是登录应用程序所在的子域?

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net redirect login forms-authentication subdomain


    【解决方案1】:

    是的,这当然是可能的,但您需要同时更改身份验证子域和需要身份验证的子域。

    需要身份验证的子域。
    您遇到的问题是,当匿名用户尝试访问受保护的资源时,ASP.NET 表单身份验证会将他们重定向到登录页面并将原始请求的资源附加到“ReturnURL”查询字符串 但此 ReturnURL 参数是相对网址

    因此,要使其以您想要的方式工作,您需要操纵 ReturnURL 参数以某种方式指示返回到不同的站点。

    执行此操作的一种方法是使用 HttpHandler 操作 ReturnURL 以挂钩到 PostAuthenticateRequest,如本文Forms Authentication With Absolute Return URLs 中所述。

    身份验证子域
    要启用到调用子域的重定向,您需要在 web.config 的表单部分中将 enableCrossAppRedirects 属性设置为“true”,以允许重定向到另一个 Web 应用程序中的 URL。但请注意这一点的含义,因为它会让您对open redirection attacks 开放。

    直接在 ReturnURL 上设置子域地址(有助于防止开放重定向攻击)的另一种更安全的方法是修改 ReturnURL 以在查询字符串中包含已知参数,然后修改 global.asax 中的 Application_EndRequest herehere 中提到的身份验证子域的 .cs 以重写 Response.RedirectLocation。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2013-09-24
      相关资源
      最近更新 更多