在这里,情况如下:
域A上有一个网页。用户正在域A中进行身份验证(并在sessionStorage中保存auth令牌),并在其中进行一些活动。然后用户需要进入域B上的页面。一旦他从域B登陆到该页面,该页面就应该保留来自域A的令牌。我控制着域B的服务器。
最简单的方法是在域A的页面上有一个按钮,其内容如下
location.href = 'domainB.com/?authtoken=mytoken'这就是我面临的问题:
1)我不能(也就是强烈不希望)在URL中使用查询参数,即使连接是https: URL(一般情况下)是被记录的,而且任何攻击都很容易窃取令牌auth,这是安全漏洞。
2)我不想设置跨域cookies同样的原因(安全性)。
3) domainB应用程序是基于API的,服务器和客户端都是无会话的。所有令牌都位于sessionStorage中,以防止安全漏洞。
在过去的几天里,我做了很多谷歌搜索,但似乎我不能为跨域页面加载添加自定义的标题。“‘POST”不重新加载页面。到目前为止,我能够发明的唯一选择是放弃使用服务器端会话,即:
( a)在从域A导航到B之前,请服务器B创建一次性使用的会话密钥。
使用该会话键的查询参数导航到域B。
( c)一旦域B上的服务器获得会话密钥的“GET”请求,检索相关的auth令牌,丢弃会话密钥(即有效地使其成为一次定时器),并在标头中使用auth令牌服务页面。
这种方法的问题:
还有其他建议吗?其他人是怎么解决的?我不认为每个人都使用这样的安全失败作为URL查询参数。
发布于 2015-08-27 05:37:35
好吧,我自己想出来的。解决方案是:获取domainA页面,包含iframe并从domainB加载该iframe,然后将带有令牌/auth信息的domainA页面的消息发送到iframe,在该特殊页面(现在驻留在iframe中)接收该消息,并将其值存储在sessionStorage (现在属于domainB)中,然后从iframe执行postMessage到父级,通知存储数据,然后导航到父级的domainB --一旦主domainB页面加载,就需要在sessionStorage中提供所需的信息。
https://stackoverflow.com/questions/32186522
复制相似问题