AngularJS安全令牌与会话

时间:2015-07-09 20:55:14

标签: javascript php angularjs security session

我现在需要两周的时间来学习和构建AngularJS + PHP系统,而我仍然在努力进行身份验证。我一直在阅读很多关于AngularJS的帖子,其中没有一个人似乎考虑了身份验证的安全方面。当我在另一篇文章中询问AngularJS存储的安全性时,我也得到了一个有趣的回应,并且在处理tokens时得到了Stormpath博客的两个很好的链接,这些博客涉及安全领域。

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

检查用户是否已登录时,我们通常会检查$_SESSION变量是否存在,让我们说uid。现在基于令牌的方法,我们在HTTP headers中发送令牌并读取该令牌,然后验证它并获取用户信息。在AngularJS中,我们得到成功的回复并返回承诺。

会话具有由服务器处理的优点。他们创建一个会话,如果它仍然存在,它们会自动处理它。在处理基于令牌的身份验证时,如果用户没有自行销毁,则必须使用预定脚本来处理它的到期,刷新和销毁。这似乎太多了。

1 个答案:

答案 0 :(得分:2)

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

然后客户端在每个后续请求发送令牌。令牌具有自我验证的属性:它包括有效性,用户名和加密签名。

此类签名证明令牌对服务器有效,即使服务器已完全丢弃令牌。

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

这是JSON Web Tokens的优势:它们允许完全无状态的服务器,而不必管理身份验证令牌生命周期。