由于 JWT 令牌较大,超出了 Javascript 设置的 cookie 最大大小

Posted

技术标签:

【中文标题】由于 JWT 令牌较大,超出了 Javascript 设置的 cookie 最大大小【英文标题】:Javascript set cookie max size is exceeded due to a large JWT token 【发布时间】:2020-06-24 04:56:03 【问题描述】:

我使用 JWT 令牌进行身份验证,并且由于服务器是无状态的,因此客户端(javascript 应用程序)使用 cookie 来存储 JWT 令牌,每次都从 cookie 中读取令牌,并在任何调用时相应地设置授权标头服务器。我面临的问题是令牌可能会大于 4KB,这会导致 javascript 部分出现故障。显然,Javascript 的 cookie 大小限制为 4KB。因此,这导致了一个问题。

Set-Cookie header is ignored in response from url: xxxxx. Cookie length should be less than or equal to 4096 characters

我的问题是,从 javascript 的角度来看,我可以做些什么来解决 cookie 限制?在 cookie 中设置 JWT 令牌是否正确?我认为某些应用程序可能会出现大于 4KB 的 JWT 令牌。以无状态方式处理它并管理 javascript 限制的替代(但安全)方法是什么?

【问题讨论】:

【参考方案1】:

您可以将令牌存储在sessionStoragelocalStorage 中,并将令牌附加到Authentication 标头中的所有请求中。您可以在您的应用程序中实现Bearer Authentication

您可以将数据保存在sessionStoragelocalStorage 中,最大为 5 MB,这些方法比cookie 更安全。

会话存储:

sessionStorage 属性访问当前源的会话存储对象。 sessionStorage 类似于 localStorage;不同的是,localStorage 中的数据不会过期,而 sessionStorage 中的数据会在页面会话结束时被清除。

    只要浏览器处于打开状态,页面会话就会持续,并且会继续存在 页面重新加载和恢复。

    在新选项卡或窗口中打开页面会创建一个新会话 ***浏览上下文的值,它不同于 会话 cookie 工作。

    打开多个相同的选项卡/窗口 URL 为每个选项卡/窗口创建 sessionStorage。关闭选项卡/窗口 结束会话并清除 sessionStorage 中的对象

本地存储:

只读的 localStorage 属性允许您访问文档来源的存储对象;存储的数据跨浏览器会话保存。 localStorage 与 sessionStorage 类似,只是 localStorage 中存储的数据没有过期时间,而 sessionStorage 中存储的数据会在页面会话结束时(即页面关闭时)被清除。

【讨论】:

感谢您的回复。我可以看到在我的情况下使用本地存储是可能的。但是,我担心我可能遇到的安全漏洞。我可以找到很多关于这个的文章。有人说 cookie 更安全,有人说本地存储是更好的选择。不过,我会继续调查。【参考方案2】:

您可以同时使用 localStorage 和 sessionStorage,要清楚了解两者,请参阅here!回答。

【讨论】:

以上是关于由于 JWT 令牌较大,超出了 Javascript 设置的 cookie 最大大小的主要内容,如果未能解决你的问题,请参考以下文章

在每个API调用之前验证JWT令牌

JWT 访问令牌和刷新令牌安全性

jwt.io 从哪里获取 JWT 令牌的公钥?

JWT 令牌是如何认证的?

如何将 jwt 令牌添加到 url?

PyGithub 中的 JWT 令牌身份验证问题