Angular 2/4 存储令牌的位置

Posted

技术标签:

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

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

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

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

【问题讨论】:

Angular2 cookies instead of localstorage的可能重复 这不是重复的,因为这里涉及到安全性,其他帖子不是这样。 【参考方案1】:

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

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

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

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

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

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

所以基本上总结一下:

XSS 攻击是 TokensLocalStorage 的问题。但这并不是因为 Angular 会清理所有内容,从而有效地防止 XSS 攻击。 (https://angular.io/guide/security#angulars-cross-site-scripting-security-model) XSRF 攻击是 Cookies 的一个问题,您必须建立自己的安全框架来处理它们。

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

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


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

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

https://auth0.com/learn/refresh-tokens/ https://auth0.com/docs/tokens/refresh-token/current

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

https://dev.to/neilmadden/7-best-practices-for-json-web-tokens(第 6 和第 7 部分)

https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec

【讨论】:

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

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

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

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

【讨论】:

有道理,谢谢。要记住的一点是,前端应用程序永远不能被信任。假设恶意用户在处理对您的 api 的请求时携带令牌,并仅限制该身份所需的数据

以上是关于Angular 2/4 存储令牌的位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 下载 .xls 文件:JSON.parse (<anonymous>) 位置 0 处的 JSON 中的意外令牌 P

在前端存储令牌和敏感信息的安全方式(Angular 8)

在 Angular 2/4/6 应用程序中管理状态的最佳实践

如何使用 Angular 2 发送 OAuth2 的客户端 ID 和秘密 ID?

如何在 Angular 应用程序中存储身份验证令牌

如何存储 Angular 前端使用的 OAuth1 令牌