首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表单身份验证-重定向回原始域

表单身份验证-重定向回原始域
EN

Stack Overflow用户
提问于 2013-03-09 04:53:50
回答 1查看 1.9K关注 0票数 0

示例:

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

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

代码语言:javascript
运行
复制
<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)。是否可以将表单身份验证重定向回最初的请求子域,而不是登录应用程序所在的子域?

在这方面的任何帮助都将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,如所提到的herehere,以重写Response.RedirectLocation。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15303094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档