javascript - AngularJS 安全 token 与 session

标签 javascript php angularjs security session

我现在已经学习和构建 AngularJS+ PHP 系统两周了,但我仍在为身份验证而苦苦挣扎。我读过很多关于 AngularJS 的文章,但似乎没有一篇考虑身份验证的安全方面。当我在另一篇文章中询问 AngularJS 存储的安全性时,我也得到了一个有趣的答复,并获得了 Stormpath 博客的两个很好的链接,其中涵盖了处理 token 时的安全领域。 。

有关 AngularJS 的大多数教程和示例似乎都采用 JWT 方法,并通过 HTTP 将该 token 发送到您的 REST API headers,但考虑到 token 存储在 Javascript 中,这可能会将其暴露于多种攻击类型。其中之一是 MITM。为了防止此类攻击,解决方案是设置带有 HttpOnly 和 Secure 标志的 cookie。现在, token 会在每个请求中传递,它不会由 Javascript 存储,而且是安全的。但是,这在您对用户进行身份验证时提出了一个问题:当您仅处理来自同一服务器的 HTTP 请求时,这与使用 session 有何不同?

在检查用户是否已经登录时,我们通常会检查 $_SESSION 变量是否存在,比如 uid。现在,在基于 token 的方法中,我们在 HTTP header 中发送 token 并读取该 token ,然后验证它并获取用户信息。在 AngularJS 中,我们获得成功的响应并返回一个 promise 。

session 的优点是由服务器处理。他们创建一个 session ,如果它仍然存在,他们会自动处理它的销毁。在处理基于 token 的身份验证时,如果用户自己没有销毁它,则必须使用计划脚本处理它的过期、刷新和销毁。这看起来工作量太大了。

最佳答案

使用 token 的想法是允许服务器完全无状态。服务器只提供登录服务,登录成功后返回一个临时 token ,并且它立即忘记该 token ,不会将其存储在任何地方(数据库、内存)。

然后客户端在每个后续请求中发送 token 。 token 具有 self 验证的属性:它包括有效性、用户名和加密签名。

这样的签名证明了该 token 对于服务器来说是有效的,即使服务器已经完全丢弃了该 token 。

这样服务器就不必处理 token 的过期/销毁:它可以检查传入的 token 并验证它们,仅检查 token (感谢签名)。

这就是 JSON Web token 的优势:它们允许完全无状态的服务器,无需管理身份验证 token 生命周期。

关于javascript - AngularJS 安全 token 与 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328045/

相关文章:

php - 使用 PHP 确保添加到 MySQL 表的唯一性

javascript - React Native 和 Apollo : Can't find variable: document

javascript - 如何开始使用 Node.js

javascript - 当标记放置在多边形上时如何获取多边形属性

node.js - Angular.js 可以在脚本标签中的 Jade 模板中进行插值吗?

javascript - 在 angularjs 中使用 'track by' 选择默认下拉列表不起作用

javascript - Angular 中的某些变量未定义错误?

javascript - BrowserSync + gulp : Cross domain Cors Issue

php - 为什么这个 Ajax 渲染需要这么长时间?

php - 无法加载所有 iframe