我应该为每个请求从 sessionStorage 获取访问令牌吗?

5 javascript session-storage local-storage access-token jwt

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

// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);
Run Code Online (Sandbox Code Playgroud)

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

token = '';
sessionStorage.removeItem("token");
Run Code Online (Sandbox Code Playgroud)

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

{ headers: { "Authorization": "Bearer " + token } }
Run Code Online (Sandbox Code Playgroud)

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

{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 4

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

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

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