angular - 对于 Angular 应用程序,我应该在哪里存储从 Auth Server 生成的 JWT 令牌?
问题描述
我有一个具有登录页面(用户名和密码)的应用程序。成功通过身份验证后,我会收到来自身份验证服务器的 access_token、到期、刷新令牌和其他声明。
我需要在浏览器中的哪里存储这些令牌,以便对于其他 API 请求,我可以提取 access_token 并附加到 API 的标头?
将这些令牌存储在浏览器的 localStorage 中是一种良好的做法和安全吗?
因为当我们在开发者工具 (chrome) 中查看这些令牌时,它们就会暴露出来。
解决方案
简而言之,将token存储在Local Storage中就可以了。
- 为什么?您需要了解XXS(跨站点脚本)攻击。只有在您的域上运行的 JavaScript 代码才能访问本地存储。当恶意 JavaScript 代码进入您的站点并从本地存储中窃取您的令牌时,就会发生 XXS 攻击。这些恶意代码从何而来?来源 1:CDN 和第三方库。不要使用粗略的第三方代码,你会没事的。来源 2:黑客使用
<script>
标签在您的网站上发布恶意代码。您不必担心这一点,因为Angular 会忽略所有<script>
tag。 - 您可能听说过XSRF/CSRF(Cross-Site Request Forgery)攻击。仅当您使用 cookie 存储令牌时才担心这一点。当黑客向用户发送您网站的发布请求链接并且用户单击它时,就会发生这种情况。由于浏览器总是发送同一域中的 cookie,因此黑客发布的请求得到了身份验证。
您可以自行搜索 XSS 和 XSRF。非常有趣的主题。
推荐阅读
- python - 使用 Tkinter 在 python 中制作 9x9 入口网格的最有效方法?
- python - 返回输出“无”的函数
- r - ggplot 延长空因子水平的 x 比例
- json - 循环遍历 JSON 键和值,同时替换 golang 中的指定匹配值
- reactjs - Material UI:使用 ButtonBase 上传文件
- r - 使用 R 有条件地从数据库中删除行
- php - 在命令中使用 SwiftMailer - Symfon 4.1
- c++ - Vec3b:r/g/b 颜色的最大值是 254 而不是 255
- regex - Notepad++ 和正则表达式(多行)
- javascript - 如何通知主函数调用异步函数失败?