我现在已经学习和构建 AngularJS
+ PHP
系统两周了,但我仍在为身份验证而苦苦挣扎。我读过很多关于 AngularJS 的文章,但似乎没有一篇考虑身份验证的安全方面。当我在另一篇文章中询问 AngularJS 存储的安全性时,我也得到了一个有趣的答复,并获得了 Stormpath 博客的两个很好的链接,其中涵盖了处理 token 时的安全领域。 。
有关 AngularJS
的大多数教程和示例似乎都采用 JWT
方法,并通过 HTTP 将该 token 发送到您的
,但考虑到 token 存储在 Javascript 中,这可能会将其暴露于多种攻击类型。其中之一是 MITM。为了防止此类攻击,解决方案是设置带有 HttpOnly 和 Secure 标志的 cookie。现在, token 会在每个请求中传递,它不会由 Javascript 存储,而且是安全的。但是,这在您对用户进行身份验证时提出了一个问题:当您仅处理来自同一服务器的 HTTP 请求时,这与使用 session 有何不同? REST API
headers
在检查用户是否已经登录时,我们通常会检查 $_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/