Angular 2/4存储令牌的位置

use*_*934 17 cookies token local-storage typescript angular

我有一个用于生成令牌的休息api,我在角度4客户端使用,但问题是在哪里存储此令牌.

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

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

Ale*_*net 12

这是一篇关于令牌/ Cookies的完整文章,它可以为您提供有关此主题的大量知识:auth0:Cookies VS Tokens

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

面向网站的两种最常见的攻击媒介是跨站点脚本(XSS)和跨站点请求伪造(XSRF或CSRF).

当外部实体能够在您的网站或应用程序中执行代码时,就会发生跨站点脚本攻击.

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

我们的CTO过去一直认为,与XSRF攻击相比,XSS攻击更容易处理,因为它们通常被更好地理解.

所以基本上总结一下:

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

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


更进一步:我想你的令牌将用于身份验证,并意识到人们已经使用过它并知道使用它们的好/坏做法.

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


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

  • 基本上,由于 angular 可以保护您免受 XSS 攻击,因此没有人应该能够从 localStorage 获取 JWT。即使有人设法获得了一个令牌,使用“短期”令牌的想法(以刷新令牌的原则获得新的短期访问令牌)将使存储的令牌过时且很快失效。我将编辑帖子并添加更多链接来深入解释。 (2认同)

Mad*_*jan 1

更重要的是你将如何验证它,而不是你如何存储令牌,你采取了什么安全专业来在服务器端验证相同的令牌。

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

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