【问题标题】:Angular 2/4 where to store tokenAngular 2/4 存储令牌的位置
【发布时间】:2018-02-28 07:30:27
【问题描述】:

我有一个用于生成令牌的 rest api,我在 angular 4 客户端使用它,但问题是在哪里存储这个令牌。

在互联网上我发现我可以存储在本地存储或 cookie 中。

所以我的问题是,例如,如果存储令牌是本地存储,并且我刚刚从另一个浏览器复制了有效令牌,那么我将拥有一个有效令牌,因此存储这样的令牌有任何安全性,并且cookie 基本相同,或者我错过了一些重要信息?

【问题讨论】:

标签: angular typescript cookies local-storage token


【解决方案1】:

这里有一篇关于 Tokens / Cookies 的完整文章,可以让你对这个主题有很多了解:auth0 : Cookies VS Tokens

我将引用最重要的部分来让您了解接下来会发生什么:

网站面临的两个最常见的攻击媒介是跨站脚本 (XSS) 和跨站请求伪造(XSRF 或 CSRF)。

Cross Site Scripting) 攻击发生在外部实体能够在您的网站或应用程序中执行代码时。

如果您将 JWT 与本地存储结合使用,则跨站请求伪造攻击不是问题。另一方面,如果您的用例要求您将 JWT 存储在 cookie 中,则需要防止 XSRF。

我们的 CTO 过去曾辩称,与 XSRF 攻击相比,XSS 攻击更容易处理,因为它们通常更容易理解。

所以基本上总结一下:

因此,我建议使用标准的 JWT 令牌方法来管理您的令牌。由于您的令牌使用 JWT 格式签名,因此我认为这是最安全的解决方案。当然,标准令牌需要加密签名(不一样)才能真正安全。

使用适当的库(例如https://github.com/auth0/angular2-jwt)非常容易设置和管理


更进一步:我想您的令牌将用于身份验证,并注意人们已经使用过它并且知道使用它们的好/坏习惯。

您应该了解如何从使用 刷新令牌 的工作网站(例如 Twitter / Facebook 等)管理身份验证。以下是您可能感兴趣的一些附加链接:


编辑:有关 JWT 最佳实践的附加链接:

【讨论】:

  • 感谢您的回复,我正在使用jwt令牌,但它如何更好?我只是把这个令牌放到一个标头中,这个令牌在服务器端解密,但是任何拥有这个令牌的人,可以将它复制粘贴到他的浏览器,并使用它,或者我错过了什么?跨度>
  • 基本上,由于 Angular 可以保护您免受 XSS 攻击,因此没有人应该能够从 localStorage 获取 JWT。而且即使有人设法获得了一个令牌,使用short-lived 令牌的想法(使用刷新令牌的原理来获得新的短期访问令牌)也会使存储的令牌很快过时和失效。我将编辑帖子并添加更多链接来深入解释。
【解决方案2】:

更多的是关于你将如何验证它,而不是你如何存储令牌,你在服务器端使用了哪些安全专业来验证它​​。

如果您启用了 CORS 的 API,您需要确保请求来自有效客户端而不是恶意来源。

如果您使用 Token 存储机密信息,则需要在存储前对其进行加密。

【讨论】:

  • 有道理,谢谢。要记住的一点是,前端应用程序永远不能被信任。假设恶意用户在处理对您的 api 的请求时携带令牌,并仅限制该身份所需的数据
猜你喜欢
  • 2014-09-19
  • 2017-12-10
  • 2017-06-29
  • 2019-10-25
  • 2015-12-13
  • 2018-08-05
  • 2015-12-14
  • 1970-01-01
  • 2017-05-11
相关资源
最近更新 更多