【问题标题】:How to add headers on cross domain redirect如何在跨域重定向上添加标头
【发布时间】:2015-11-18 03:01:10
【问题描述】:

这里的场景:

域 A 上有一个网页。用户正在域 A 中进行身份验证(并将身份验证令牌保存在 sessionStorage 中),并在那里进行一些活动。然后用户需要转到域 B 上的页面。一旦他从域 B 登陆页面,该页面应该以某种方式保留域 A 的身份验证令牌。我控制域 B 的服务器。

最简单的方法是在域 A 的页面上设置一个按钮,类似于

location.href = 'domainB.com/?authtoken=mytoken'

我面临的问题来了:

1) 我不能(又名强烈不希望)在 URL 中使用查询参数,即使连接是 https:URL(通常)已被记录,并且任何攻击都会轻易窃取令牌身份验证,这是一个安全漏洞。

2) 我不想设置跨域 cookie - 相同的原因(安全性)。

3) domainB 应用程序是基于 API 的,服务​​器和客户端是无会话的。所有身份验证令牌都位于 sessionStorage 中以防止安全漏洞。

过去几天我做了很多谷歌搜索,但似乎我无法为跨域页面加载添加自定义标题。 'POST' 不会重新加载页面。到目前为止,我能够发明的唯一选择是放弃使用服务器端会话,即:

a) 在从域 A 导航到 B 之前,请求服务器 B 创建一次性使用的会话密钥。

b) 使用该会话密钥的查询参数导航到域 B。

c) 一旦域 B 上的服务器收到带有会话密钥的“GET”请求,检索关联的身份验证令牌,丢弃会话密钥(即有效地将其设为一次性),并在标头中使用身份验证令牌提供页面。

这种方法的问题:

  1. 它迫使我使用服务器端会话,即显着降低性能。

  2. 身份验证令牌(但暂时)保存在域B服务器端会话中,这增加了整个系统的安全漏洞。

  3. 仍然对中间人攻击持开放态度。

还有其他建议吗?别人是怎么解决的?我不认为每个人都在使用 URL 查询参数这样的安全失败。

【问题讨论】:

    标签: security authentication cross-domain


    【解决方案1】:

    好的,我自己想通了。解决方案是:获取 domainA 的页面,包含 iframe 并从 domainB 加载具有特殊页面的 iframe,然后使用令牌/身份验证信息从 domainA 上的页面向 iframe 发送消息,在该特殊页面中接收该消息(现在位于 iframe 中)并存储它是 sessionStorage 中的值(现在属于 domainB),然后从 iframe 到 parent 执行 postMessage 以通知数据已存储,然后导航到 parent 中的 domainB - 一旦主 domainB 页面加载,它将在 sessionStorage 中具有所需的信息。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2018-10-07
      • 2013-02-14
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2014-04-24
      相关资源
      最近更新 更多