如何存储 jwt 令牌以便重定向到其他子域不需要凭据
Posted
技术标签:
【中文标题】如何存储 jwt 令牌以便重定向到其他子域不需要凭据【英文标题】:How to store jwt token so that redirecting to other subdomain doesn't require the credentials 【发布时间】:2020-12-25 07:02:45 【问题描述】:。我将它存储在一个 cookie 中,但在 iPhone 上,它不起作用。重定向到其他子域时要求输入密码。
function saveJWT(jwtKey, jwtValue)
let days;
if(!days)
days = 365* 20;
const date = new Date();
date.setTime(date.getTime() + (days* 24 * 60 * 60 * 1000));
console.log(date)
const expires = ';expires' + date.toUTCString();
console.log(expires)
const prodCookie = jwtKey+ "=" +jwtValue+ expires +
";domain=.cerebry.co;path=/"
const devCookie = jwtKey+ "=" +jwtValue+ expires + "; path=/ "
if(location.hostname === "localhost")
document.cookie = devCookie;
else
document.cookie = prodCookie;
【问题讨论】:
【参考方案1】:Cookie 应该可以工作,请确保在设置 cookie 时设置正确的路径和根域。 如果域在 Set-Cookie 标头中明确命名,则 2 个域 mydomain.com 和 subdomain.mydomain.com 只能共享 cookie。否则,cookie 的作用域仅限于请求主机。
如果您使用以下内容,它将在两个域中都可用: 设置 Cookie:名称=值;域=mydomain.com
由于 cookie 可能会被 XSS 攻击窃取,因此请确保防止令牌侧钉。请参阅 OWASP 以保护您的 JWT 身份验证机制 https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html
【讨论】:
pastebin.com/BKi2qWDs我用这种方式保存,请问我这里做错了什么? 我将域视为 .domain=.cerebry.co。删除开始时的点字符。例如,如果您的域是 app.cerebry.co,则域应设置为“cerebry.co”。此外,由于最近 chrome 对 cookie 的更改,请确保首先设置 cookie,因为如果未设置相同站点属性,则需要 https 域 我改用 cerebry.co 仍然无法在 iPhone 上运行 那部iphone的ios版本是多少?你试过用旧的 iphone 吗? 尝试使用旧的 ios 版本或尝试通过 mac 进行调试,它应该会显示一些问题【参考方案2】:在 Iphone 中保存 cookie 时出现问题,所以我使用 js-cookie 库解决了我的问题 JS COOKIE LINK
【讨论】:
是否特定于特定的 ios 版本或手机?因为我听说 safari 在子域中的 cookie 有一些问题以上是关于如何存储 jwt 令牌以便重定向到其他子域不需要凭据的主要内容,如果未能解决你的问题,请参考以下文章
在 Vue.js 中捕获和重定向 JWT 令牌过期,而不阻塞 Vue 3 中的其他 401 错误