【问题标题】:Persisting authentication token in AngularJS在 AngularJS 中持久化身份验证令牌
【发布时间】:2014-05-13 19:58:48
【问题描述】:

我正在构建一个 AngularJS 应用程序,它与使用身份验证令牌对用户进行身份验证的 API 进行交互。一切似乎都运行良好,但我正在努力寻找一种在请求之间正确保留身份验证令牌的方法。

目前,当用户使用正确的凭据登录时,会返回 authToken,我将其设置为 $rootScope.authToken。我还将发送该身份验证令牌以用于将来的请求,但如果我进行硬重新加载,则使用 F5 $rootScope 重新加载网页会被清除,我必须再次进行身份验证。

我知道我可以将 authToken 存储在 cookie 中,但这会是最安全的方式吗?我最好使用本地存储来存储令牌吗?如果使用本地存储,当用户重新启动浏览器时,它不会被清除吗?理想情况下,我希望登录持续几天。

【问题讨论】:

    标签: angularjs authentication persistence


    【解决方案1】:

    首先,我不确定您的authToken 的格式是什么,但localStorage 不应用于任何敏感数据。只要您的authToken 通过某种形式的加密或随机数相对防篡改,使用localStorage 效果很好(并且在浏览器重新启动后仍然有效)。

    本质上,您应该小心,因为该值对所有客户端用户都是“可见的”,所以应该假定它可以修改或增加。

    您是否考虑过撤销登录会话?例如,如果您想注销应用程序的所有个活动会话,您会怎么做?由于authToken 存储在客户端,您可能需要为其添加时间戳(或其他一些唯一值),以便在服务器端进行检查。

    【讨论】:

    • 在这种情况下,是否可以在将登录令牌发送给用户之前在服务器端对其进行加密,以便他们存储加密版本?然后,当令牌发送到服务器时,它会被解密并检查以确保其有效等。撤销所有用户会话没有问题,它们存储在一个表中,并且每个客户端请求都会根据它们进行检查。如果我清理桌子,每个人都会退出 :)
    • 是的,一定要在服务器端加密它,并在服务器收到的每个 API 请求时重新检查它。这是用作基本安全门最安全的模型。这种方法仍然存在一些问题,我建议还设置一个 CSRF 令牌(除了您的 authToken 值)。 AngularJS 本身就支持这个二级令牌,这将为您的应用程序增加另一个障碍。在此处查看有关 XSRF 的文档:docs.angularjs.org/api/ng/service/$http
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-01-10
    • 2018-08-03
    • 1970-01-01
    • 2013-12-24
    • 2014-04-10
    相关资源
    最近更新 更多