【问题标题】:Should i get access-token from sessionStorage for each request?我应该为每个请求从 sessionStorage 获取访问令牌吗?
【发布时间】:2018-11-19 18:34:35
【问题描述】:

所以基本上当我登录时,我的后端会返回一个令牌,所以我将其存储为:

// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);

当我注销时,我只是从 sessionStorage 中删除项目并重置 var:

token = '';
sessionStorage.removeItem("token");

然后在我的所有请求中,我使用 var 创建标头

{ headers: { "Authorization": "Bearer " + token } }

但我不知道我是应该保留令牌变量还是只访问每个请求的存储,例如:

{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }

现在我只是在用户刷新页面时使用存储,所以他不会丢失javascript上下文,因为我认为比每次请求访问存储更有效,但我不知道是什么安全方面的最佳方法,或者开发人员通常会做什么?

【问题讨论】:

    标签: javascript local-storage jwt access-token session-storage


    【解决方案1】:

    从安全角度来看没有区别;两者都不比另一个更安全。

    如果您在进行 ajax 调用时只需要令牌,则不必担心从 sessionStorage 获取令牌的开销。该操作根本不需要任何大量时间,当然与进行 ajax 调用相比。如果您在一个紧密的循环中使用它来执行数千次(或可能数十万次)操作,而用户等待它们,您只需要将结果缓存在一个变量中。您可能出于其他原因(例如方便)将它放在变量中,但在您描述的情况下没有效率参数。

    一般规则:当您遇到性能问题时担心性能(但是,您知道,不要完全愚蠢地做您知道效率极低的事情......)。 :-)

    【讨论】:

      【解决方案2】:

      首先 - 如果您正在加载 ANY 第三方 JS,请不要使用本地/会话存储来存储任何敏感数据,包括令牌(JWTs 我猜?)。这种类型的存储是完全不受保护的;您页面上运行的任何 JS 都可以访问它。一旦任何第 3 方脚本受到威胁,您的应用程序也会受到威胁(可能会将所有用户会话数据发送给攻击者)。 JWT 在某种程度上相当于用户名 + 密码,应该这样处理。使用securehttpOnly cookie 传输JWTs 或在服务器端存储会话数据并使令牌成为签名会话cookie。

      访问本地/会话存储的开销可以忽略不计。但是,如果您非常担心性能,请在应用程序初始化时将令牌加载到变量(或某种服务或存储)中,使用它构造 Authorisation 标头并仅在令牌更改时访问存储。

      另外,请在这里拍个高峰:

      https://dev.to/rdegges/please-stop-using-local-storage-1i04

      https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

      希望这会有所帮助:-)

      【讨论】:

        猜你喜欢
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 2014-02-17
        • 2013-06-14
        • 2021-06-01
        • 2020-04-13
        • 1970-01-01
        相关资源
        最近更新 更多