如何使用 javaScript 或 Angular 安全地存储 J.W.T 令牌?

Posted

技术标签:

【中文标题】如何使用 javaScript 或 Angular 安全地存储 J.W.T 令牌?【英文标题】:How to safely Store J.W.T token using java Script or angular? 【发布时间】:2019-03-07 16:18:04 【问题描述】:

我找到了 3 种方法将其保存在客户端(本地存储/会话存储/cookies)..但这不够安全。因为客户端或黑客可以修改或替换为另一个有效的重新生成的 J.W.T 令牌。 我想以加密方式或无法破解的方式存储令牌... 请告诉我专业的工作方式或存储 access_token....

【问题讨论】:

不要把它存储在客户端,这样会保证安全。 将其存储在 HttpOnly/Secure cookie 中可能是最安全的,同时将其与用于 CSRF 令牌的 Secure cookie 一起存储。但是您将无法访问存储的数据。 “因为客户端或黑客可以修改或替换为另一个有效的重新生成的 JWT 令牌。我想以加密方式或无法破解的方式存储令牌”此语句表明您对 JWT 的工作方式存在根本性的误解。如果您正确签署它们,黑客就不可能修改或替换它们。此外,如果您也愿意,该规范还允许加密以隐藏有效负载。 【参考方案1】:

“这不够安全。因为客户端或黑客可以修改或替换为另一个有效的重新生成的 J.W.T-token”

所以,虽然我不确定您的具体应用程序要求,但我会这样说:通过 cookie 存储在客户端是可行的方法... cookie 不易受 XSS 攻击,CSRF 是一个简单的修复与现代框架。例如。仅通过 HTTPS 发送 JWT cookie 并设置 HttpOnly 标志(可能还有 Secure 标志)。这是一种非常标准的做法,因为它比网络存储更安全。 Check out this article from stormpath

【讨论】:

无论如何,@Paul 的评论是完全正确的。无论您将 jwt 存储在哪里,如果有人修改或替换为另一个令牌,API 安全机制必须能够检测到它。

以上是关于如何使用 javaScript 或 Angular 安全地存储 J.W.T 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 8 或 javascript 中明智地获取当前日期每周日

如何检测 angular.js 中的 keydown 或 keypress 事件?

如何在 Angular 中动态嵌入来自 Cloudinary 的第三方 javascript 小部件?

使用 javascript 或 angular js 隐藏侧边栏

在Angular Js中重新加载后,如何将复选框(选中或未选中)从javascript控制器更新到html页面?

使用 Express 时未加载 Javascript (Angular)