Asp.net 表单身份验证-重定向回原始域

Asp.net 表单身份验证-重定向回原始域,asp.net,redirect,login,forms-authentication,subdomain,Asp.net,Redirect,Login,Forms Authentication,Subdomain,例如: 应用程序= 应用程序在web.config中启用了表单身份验证: <authentication mode="Forms"> <forms loginUrl="https://test.mytest.com/Login/" name=".ASPXAUTH"/> </authentication> <authorization> <deny users="?"/> </authorization> 但是,成

例如:

应用程序=

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

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

但是,成功登录后,将转到:

而不是

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


在此方面的任何帮助都将不胜感激。

是的,这当然是可能的,但您需要对验证子域和需要验证的子域进行更改

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

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

一种方法是使用HttpHandler操纵ReturnURL,以钩住PostAuthenticateRequest,如本文所述

验证子域
要启用到调用子域的重定向,您需要在web.config的forms部分将属性设置为“true”,以允许重定向到另一个web应用程序中的URL。但要意识到这一点的含义,因为它会让你面临挑战

直接在ReturnURL上设置子域地址的另一种更安全的方法(有助于防止开放重定向攻击)是修改ReturnURL以在querystring中包含已知参数,然后修改所述身份验证子域的global.asax.cs中的应用程序_EndRequest,并重写Response.RedirectLocation