2015-07-09 160 views
1

我现在已经两周的时间学习并构建了一个AngularJS + PHP系统,我仍在努力进行身份验证。我一直在阅读大量有关AngularJS的帖子,而且他们中的一个似乎没有考虑认证的安全性方面。当我询问AngularJS存储在另一篇文章中的安全性时,我也有了一个有趣的回应,并且在与tokens打交道时,与Stormpath的博客有两个很好的链接,涵盖了安全领域。AngularJS安全令牌与会话

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

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

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

+0

它可能很难找到任何关于安全性的信息,因为角度与它有很少或根本没有关系。你必须在你的服务和http请求中实现你的认证技术,但这不是一件有意义的事情,这只是一般的客户端开发。 –

回答

1

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

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

这样的签名证明令牌对服务器有效,即使服务器已经完全丢弃了令牌。

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

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