首页 > 解决方案 > 如何存储 jwt 令牌以便重定向到其他子域不需要凭据

问题描述

如何存储 jwt 令牌以便重定向到其他子域不需要凭据。我将它存储在一个 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;
}

}

标签: javascriptreactjsiphonecookiespreact

解决方案


Cookie 应该可以工作,请确保在设置 cookie 时设置正确的路径和根域。如果域在 Set-Cookie 标头中明确命名,则 2 个域 mydomain.com 和 subdomain.mydomain.com 只能共享 cookie。否则,cookie 的范围仅限于请求主机。

如果您使用以下内容,它将在两个域上都可用: Set-Cookie: name=value; 域=mydomain.com

由于 cookie 可能会被 XSS 攻击窃取,因此请确保您防止 token sidetacking 。请参阅 OWASP 以保护您的 JWT 身份验证机制 https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html


推荐阅读