我们在相同的域但有不同的子域中有两个单独的网站/应用。
例如
https://hello.website.com (Webapp 1)
https://world.website.com (Webapp 2)
我们要做的是在Webapp 1上登录用户,然后登录并单击Webapp 1中的按钮,我们希望将用户重定向到Webapp2。但是,Webapp 2需要相同的身份验证令牌当前存储在Webapp 1的本地存储中。如何使本地存储内容可用于Webapp 2?
或者有更好的方法吗?
答案 0 :(得分:3)
由于域不同,因此不可能直接从一个域的本地存储向另一个域传输信息,但是由于站点位于HTTPS上,因此应该安全且容易足以发送身份验证令牌作为搜索参数。例如,重定向时,而不是重定向到https://world.website.com
,而是使用https://hello.website.com
的当前身份验证令牌并附加它,然后 then redirect:
const url = 'https://world.website.com?token=' + authToken;
window.location.href = url;
(如果身份验证令牌中可能包含特殊字符,则可能需要先对其进行转义)
然后,在另一个域上,检查搜索参数中是否有token
,如果存在,则将其提取并保存到localStorage:
const paramsMatch = window.location.href.match(/\?.+/);
if (paramsMatch) {
const params = new URLSearchParams(paramsMatch[0]);
const authToken = params.get('token');
if (authToken) {
localStorage.authToken = authToken;
}
}
由于域位于HTTPS上,因此将令牌放在URL is safe中-窃听者将无法看到它。
答案 1 :(得分:1)
这是localstorage
和sessionstorage
的局限性。你不能iframe
有一些解决方法,但是这些解决方法既不优雅也不安全。您应该使用具有适当域属性domain=example.com
的cookie。您可能还想阅读以下关于Cookie与本地存储安全性的答案:https://stackoverflow.com/a/54258744/1235935