【问题标题】:AngularJS security tokens vs sessionsAngularJS 安全令牌与会话
【发布时间】:2015-09-28 10:50:37
【问题描述】:

我现在已经有两周的时间来学习和构建AngularJS+ PHPsystem,但我仍在努力进行身份验证。我已经阅读了很多关于AngularJS 的帖子,但似乎没有一篇考虑到身份验证的安全方面。当我在另一篇文章中询问AngularJS 存储的安全性时,我也得到了一个有趣的回应,并获得了两个指向 Stormpath 博客的链接,这些链接涵盖了处理 tokens 时的安全领域。

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

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

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

【问题讨论】:

  • 很可能很难找到任何与 Angular 相关的安全性信息,因为 Angular 与它几乎没有关系。你必须在你的服务和 http 请求中实现你的身份验证技术,但这不是一个角度的事情,这只是一般的客户端开发。

标签: javascript php angularjs security session


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 2020-02-17
    • 2020-04-17
    • 2019-12-09
    • 2010-10-05
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多