为啥浏览器不以保存 cookie 的方式保存 JWT 令牌?

Posted

技术标签:

【中文标题】为啥浏览器不以保存 cookie 的方式保存 JWT 令牌?【英文标题】:Why browsers do not save JWT token same way they save the cookie?为什么浏览器不以保存 cookie 的方式保存 JWT 令牌? 【发布时间】:2020-02-18 04:34:50 【问题描述】:

我知道 cookie 和 json 网络令牌之间的区别。当服务器在其响应头中发送 set-cookie 时,浏览器会自动将 cookie 保存在本地存储中,当需要它或进行后续 api 调用时,它会自动传输。但是 JWT 令牌是在响应正文中发送的,我们必须手动将其保存到本地存储并手动检索它并在向服务器发出后续请求时附加到请求的标头。

我在这里错过了什么吗?我只是在寻找一种以最佳方式将令牌发送给客户端的方法,并希望它能够自动保存和检索,然后像 cookie 一样附加到请求中。是否有类似“set-token”响应头的东西,或者我可以简单地在 cookie 中传输令牌?我是初学者并开始学习。提前致谢。

【问题讨论】:

使用 Cookie 还是 JWT 进行身份验证由您决定,但本质上,您必须自己在客户端管理您的 JWT 是最大的区别之一。如果您希望它自动存储,则必须根据您使用的技术寻找 javascript 框架或其他任何东西。 【参考方案1】:

Cookie 旨在与浏览器一起使用,因此如果您的应用程序将始终仅支持基于浏览器的访问,那么请使用 Cookie,以便它们更易于设置和使用。

JWT 是用于 API 访问的更高级的解决方案,虽然它也可用于基于浏览器的应用程序,但您需要完成您已经看到的所有工作。

【讨论】:

您好,胜利者,感谢您的回复。我想知道是否可以将 JWT 令牌附加到每个请求的请求标头,这样我就不必每次向服务器发出请求时都这样做? 是的,根据您的客户端 Javascript 库,您可以设置一个请求拦截器,自动在请求标头中设置 JWT 令牌。例如tutorialdocs.com/article/axios-learn.html

以上是关于为啥浏览器不以保存 cookie 的方式保存 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

为啥codeigniter2不以更安全的方式存储csrf_hash,比如session?

为啥要在服务器端保存刷新令牌?

浏览器本地储存方式有哪些?cookielocalStoragesessionStorage

为啥 php curl 不在我的 cookiefile 中保存 cookie?

为啥我的Cookies不能保存信息?

django session为啥不会重新登录