这里的情景:
域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'使用会话密钥请求,检索关联的身份验证令牌,丢弃会话密钥(即有效地使其成为一个计时器),并在标头中提供带有身份验证令牌的页面。
这种方法存在问题:
它迫使我使用服务器端会话,即性能显着下降。
在域B服务器端会话中保存(但是暂时)验证令牌,这会增加整个系统的安全漏洞。
仍然对中间人攻击开放。
还有其他建议吗?其他人如何解决它?我不认为每个人都使用这样的安全性失败作为URL查询参数。
答案 0 :(得分:0)