【发布时间】:2018-07-20 15:25:15
【问题描述】:
我熟悉 Web 存储 API 和 cookie,但我不知道存储身份验证令牌的最安全方式是什么。我想知道这是否会破坏任何第三方库。
我想要一份详尽的可用方法列表,其中包括每种方法的优缺点以及最重要的最佳方法(如果有的话)。
【问题讨论】:
标签: javascript browser jwt frontend
我熟悉 Web 存储 API 和 cookie,但我不知道存储身份验证令牌的最安全方式是什么。我想知道这是否会破坏任何第三方库。
我想要一份详尽的可用方法列表,其中包括每种方法的优缺点以及最重要的最佳方法(如果有的话)。
【问题讨论】:
标签: javascript browser jwt frontend
最安全的选项是内存中。 Checkout this for a deep dive
【讨论】:
使用基于令牌的身份验证,您可以选择存储 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
【讨论】: