存储 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 令牌以供多域使用的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring websockets (sockJS + Stomp) 与基于令牌的身份验证 (JWT) 一起使用的最佳方法