存储 JWT 令牌以供多域使用的最佳方法

Posted

技术标签:

【中文标题】存储 JWT 令牌以供多域使用的最佳方法【英文标题】:Best method to store JWT Token for multi-domain usage 【发布时间】:2021-05-27 00:27:35 【问题描述】:

我想允许用户使用 jwt-authentication( aam 插件)。

所有朋友域都安装了朋友插件。 此插件为朋友发送一个 POST 请求到特定的 aam 插件生成的端点:my-domain.com/wp-json/aam/v2/authenticate 与用户凭据。例如,响应将用户特定的 JWT 用于向friend1-domain.com 进行身份验证。 用户可以做所有神奇的事情,朋友插件允许从friend1-domain.com 做的事情。

我想将身份验证 JWT 安全地存储在用户浏览器中,以便用户可以跳转到另一个博客friend2-domain.com 使用插件为朋友做更多的魔术人员,而不需要新的身份验证(使用浏览器存储中的 JWT )。

如何做到这一点?如果您可以用一些代码来说明您的答案,那就太好了。谢谢!

【问题讨论】:

【参考方案1】:

您必须使用 samesite=None 在您的域上设置 JWT cookie。 发生的情况是,当您从friend1-domain.com 或friend2-domain.com 发出请求时,您的域中设置的jwt 现在不会根据最新浏览器版本与这些请求共享(最初默认情况下samesite 设置为none,出于安全原因,后来改为“Lax”)。 当 samesite 设置为 None 时,意味着第三方域可以发送此 cookie,同时为您的域发出可由您的域授权的请求。 你可以在这里阅读更多关于同一个站点 cookie 以及如何使用它的信息https://web.dev/samesite-cookies-explained/

您还必须在设置 samesite=None 时设置 secure=True。

【讨论】:

以上是关于存储 JWT 令牌以供多域使用的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在 ruby​​ 中存储 JWT 的最佳方法

在 JWT 令牌中存储用户权限的最佳做法是啥?

在 nodejs 中使用 JWT 刷新令牌的最佳实践

在数据库中存储和维护 JWT 刷新令牌的最佳策略?

将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法

在不使用表单的情况下,从 javascript 应用程序从节点服务器获取 JWT 令牌的最佳安全方法是啥?