我正在使用JWT令牌进行身份验证,并且由于服务器是无状态的,因此客户端(Javascript应用)使用cookie来存储JWT令牌,每次都从cookie中读取令牌,并在每次调用JWT时相应地设置授权标头服务器。我面临的问题是令牌可能会变得大于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令牌是否正确?我想在某些应用程序中会发生JWT令牌大于4KB的情况。以无状态方式处理它并管理javascript限制的替代方法(又是安全方法)是什么?
答案 0 :(得分:1)
您可以将令牌存储在sessionStorage
或localStorage
中,并将令牌附加在Authentication
标头中的所有请求中。您可以在应用程序中实现Bearer Authentication
。
您最多可以将数据保存在sessionStorage
或localStorage
中5 MB,并且这些方法比cookie
更安全。
会话存储:
sessionStorage属性访问当前源的会话存储对象。 sessionStorage与localStorage类似;区别在于,尽管localStorage中的数据不会过期,但是pageSession结束时会清除sessionStorage中的数据。
只要打开浏览器,页面会话就会持续,并且可以保留 页面重新加载和还原。
在新标签页或窗口中打开页面会创建一个新会话 顶级浏览上下文的值,与 会话cookie工作。
使用相同的选项打开多个选项卡/窗口 URL为每个选项卡/窗口创建sessionStorage。关闭标签页/窗口 结束会话并清除sessionStorage中的对象
本地存储:
只读的localStorage属性允许您访问文档来源的存储对象;存储的数据跨浏览器会话保存。 localStorage与sessionStorage相似,不同之处在于,尽管localStorage中存储的数据没有到期时间,但是在页面会话结束时(即,在关闭页面时),存储在sessionStorage中的数据将被清除。
答案 1 :(得分:0)
您可以同时使用localStorage和sessionStorage,为清楚了解两者,请参见here!答案。