我听说过浏览器存储和Cookie,但无法确定存储令牌的最佳安全方式。也不知道是否存在其他方法,或者是否有任何第三方库可以正常工作。
我想列出一份详尽的可用方法清单,每种方法都有优点/不便之处,最重要的是,如果有的话。
答案 0 :(得分:5)
使用基于令牌的身份验证,您可以选择存储JWT的位置。我们强烈建议您将令牌存储在本地存储/会话存储或cookie中。
通常,JWT被放置在浏览器本地存储中,这适用于大多数用例。
使用用户名和密码登录用户时,响应正文包含access_token JWT
。然后,您需要在客户端代码中处理此响应。然后,此令牌可以存储在localStorage或sessionStorage中。
Click here for an example using sessionStorage
localStorage
和sessionStorage
都延伸Storage
。它们之间的唯一区别是数据的持久性:
localStorage
- 数据会一直存在,直到明确删除为止。所做的更改将保存并可用于该网站的所有当前和未来访问。
sessionStorage
- 所做的更改会保存并可用于当前页面,以及将来在同一窗口中访问该网站。窗口关闭后,存储将被删除。
您还可以使用Cookie来存储JWT。设置cookie的确切方法取决于您使用的客户端语言。
有多种方法可以控制cookie的生命周期:
httpOnly
标志,则可以通过JavaScript和服务器端代码读取Cookie,也可以只读取服务器端。Referer
和Origin
标题,可以部分阻止CSRF。原创文章:https://auth0.com/docs/security/store-tokens#how-to-implement
答案 1 :(得分:3)
最安全的选项是在内存中。 Checkout this for a deep dive