如何在跨域重定向

时间:2015-08-24 15:49:47

标签: security authentication cross-domain

这里的情景:

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

最简单的方法是在域A中的页面上有一个类似

的按钮
location.href = 'domainB.com/?authtoken=mytoken'

我面临的问题是:

1)我不能(也就是强烈要求)在URL中使用查询参数,即使连接是https:URL(通常)也会被记录,并且任何攻击都会轻易窃取令牌身份验证,这是一种安全性缺口。

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

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

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

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

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

c)一旦域B上的服务器获得“GET'使用会话密钥请求,检索关联的身份验证令牌,丢弃会话密钥(即有效地使其成为一个计时器),并在标头中提供带有身份验证令牌的页面。

这种方法存在问题:

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

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

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

  4. 还有其他建议吗?其他人如何解决它?我不认为每个人都使用这样的安全性失败作为URL查询参数。

1 个答案:

答案 0 :(得分:0)

好的,我自己弄清楚了。解决方法是:获取domainA的页面,包含iframe并从domainB加载带有特殊页面的iframe,然后使用token / auth信息将postmessage从domainA页面上的iframe发送到iframe,在该特殊页面中接收该消息(现在驻留在iframe中)并存储它在sessionStorage中的值(现在属于domainB),然后从iframe执行postMessage到parent以通知数据已存储,然后导航到parentB中的domainB - 一旦主domainB页面加载,它将在sessionStorage中包含所需信息