示例:
应用程序= https://test2.mytest.com/MyApplication/Download.aspx
应用程序在web.config中启用了forms身份验证:
<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)。是否可以将表单身份验证重定向回最初的请求子域,而不是登录应用程序所在的子域?
在这方面的任何帮助都将非常感谢。
发布于 2013-03-28 23:44:09
是的,这当然是可能的,但您需要在身份验证子域和需要身份验证的子域上进行更改。
需要验证的子域。
您遇到的问题是,当匿名用户试图访问受保护的资源时,ASP.NET窗体身份验证会将他们重定向到登录页面,并将原始请求的资源附加到" ReturnURL“查询字符串中,但此ReturnURL参数是相对URL。
因此,为了让它以您想要的方式工作,您需要操作ReturnURL参数,以某种方式指示返回到不同的站点。
要做到这一点,一种方法是使用HttpHandler操作ReturnURL以挂钩到PostAuthenticateRequest,如本文Forms Authentication With Absolute Return URLs中所述。
对验证子域执行操作
要启用到调用子域的重定向,您需要在web.config的forms部分中将enableCrossAppRedirects属性设置为"true“,以允许重定向到另一个web应用程序中的URL。不过,要注意这一点的含义,因为它使您可以使用open redirection attacks。
直接在ReturnURL上设置子域地址(有助于防止开放重定向攻击)的另一种更安全的方法是修改ReturnURL以在查询字符串中包含已知参数,然后修改认证子域的global.asax.cs中的Application_EndRequest,如所提到的here和here,以重写Response.RedirectLocation。
https://stackoverflow.com/questions/15303094
复制相似问题