asp.net – 表单认证ReturnUrl和子域名用于单点登录

我有一个域http://abc.com和一个子域名http://sub.abc.com.我通过共享表单身份验证cookie来实现两个站点间的单一登录.这通过使两个站点在machineKey中共享validationKey和decryptKey来实现.

用户点击子域中的页面时,我希望用户在根域中进行身份验证,并重定向到子域.用户当前被重定向登录页面,但是ReturnUrl想要重定向到根站点.

例如.目前:http://abc.com/login.aspx?ReturnUrl=/secure/default.aspx

但我想要:http://abc.com/login.aspx?ReturnUrl=http://sub.abc.com/secure/default.aspx

怎么可以实现?

在我的子域名的web.config中,我有一个这样配置的auth:

<authentication mode="Forms">
  <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" />
</authentication>

解决方法

我通过在我的子域中的表单元素中设置一个querystring来解决这个问题:
<authentication mode="Forms">
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx?returnsite=sub" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" />
</authentication>

然后在我的主要网站的验证码中,我检查该查询字符串.如果它存在我通过将我的子域名附加到returnurl来构建重定向网址.

返回网站的查询字符串真的只是作为一个标志,我需要重定向一个已知的子域,否则它将只与重定向到当前域.这应该(理论上)阻止跨站脚本.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....