首页 > 解决方案 > 对于 Angular 应用程序,我应该在哪里存储从 Auth Server 生成的 JWT 令牌?

问题描述

我有一个具有登录页面(用户名和密码)的应用程序。成功通过身份验证后,我会收到来自身份验证服务器的 access_token、到期、刷新令牌和其他声明。

我需要在浏览器中的哪里存储这些令牌,以便对于其他 API 请求,我可以提取 access_token 并附加到 API 的标头?

将这些令牌存储在浏览器的 localStorage 中是一种良好的做法和安全吗?

因为当我们在开发者工具 (chrome) 中查看这些令牌时,它们就会暴露出来。

标签: angularauthenticationsingle-page-application

解决方案


简而言之,将token存储在Local Storage中就可以了。

  • 为什么?您需要了解XXS(跨站点脚本)攻击。只有在您的域上运行的 JavaScript 代码才能访问本地存储。当恶意 JavaScript 代码进入您的站点并从本地存储中窃取您的令牌时,就会发生 XXS 攻击。这些恶意代码从何而来?来源 1:CDN 和第三方库。不要使用粗略的第三方代码,你会没事的。来源 2:黑客使用<script> 标签在您的网站上发布恶意代码。您不必担心这一点,因为Angular 会忽略所有 <script>tag
  • 您可能听说过XSRF/CSRF(Cross-Site Request Forgery)攻击。仅当您使用 cookie 存储令牌时才担心这一点。当黑客向用户发送您网站的发布请求链接并且用户单击它时,就会发生这种情况。由于浏览器总是发送同一域中的 cookie,因此黑客发布的请求得到了身份验证。

您可以自行搜索 XSS 和 XSRF。非常有趣的主题。


推荐阅读