我应该为每个请求从 sessionStorage 获取 access-token 吗?
Should i get access-token from sessionStorage for each request?
所以基本上当我登录我的后端时 returns 给我一个令牌,所以我将它存储为:
// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);
当我注销时,我只是从 sessionStorage 中删除项目并重置 var:
token = '';
sessionStorage.removeItem("token");
然后在我所有的请求中,我使用 var 来创建 header
{ headers: { "Authorization": "Bearer " + token } }
但我不知道我是应该保留令牌变量还是只为每个请求访问存储,例如:
{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }
现在我只是使用存储以防用户刷新页面,所以他不会丢失 javascript 上下文,因为我认为这比为每个请求访问存储更有效,但我不不知道什么是最好的方法 security-wise,或者开发人员通常做什么?
从安全的角度来看没有区别;两者都不比另一个更安全。
如果您只在执行 ajax 调用时需要令牌,请不要担心从 sessionStorage
获取令牌的开销。该操作根本不会花费任何重要时间,当然不会与执行 ajax 调用相比。如果您在紧密循环中使用它来执行数千次(或可能数十万次)操作,而用户等待它们,则只需要将结果缓存在变量中。出于 其他 原因(例如,方便),您可能希望它在变量中,但在您描述的情况下没有效率参数。
一般规则:遇到性能问题时担心性能(但是,您知道,不要完全愚蠢地做一些您知道效率极低的事情...) . :-)
首先要做的事情 - 如果您要加载 任何 第三方 JS,请不要使用 local/session 存储来存储任何敏感数据,包括令牌(JWT
s 我猜?)。这种类型的存储是完全不受保护的;您页面上的任何 JS 运行 都可以访问它。一旦任何第 3 方脚本受到损害,您的应用程序也会受到损害(可能会将您的所有用户 session 数据发送给攻击者)。 JWT
在某种程度上相当于用户名 + 密码,应该这样处理。使用 secure
httpOnly
cookie 传输 JWT
或存储 session 数据 server-side 并使令牌成为签名的 session cookie。
访问 local/session 存储的开销可以忽略不计。但是,如果您非常担心性能,请在应用程序初始化时将令牌加载到变量(或某种服务或存储)中,使用它构建 Authorisation
header 并仅在以下情况下访问存储令牌更改。
另外,这里取个峰:
https://dev.to/rdegges/please-stop-using-local-storage-1i04
https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage
希望对您有所帮助 :-)
所以基本上当我登录我的后端时 returns 给我一个令牌,所以我将它存储为:
// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);
当我注销时,我只是从 sessionStorage 中删除项目并重置 var:
token = '';
sessionStorage.removeItem("token");
然后在我所有的请求中,我使用 var 来创建 header
{ headers: { "Authorization": "Bearer " + token } }
但我不知道我是应该保留令牌变量还是只为每个请求访问存储,例如:
{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }
现在我只是使用存储以防用户刷新页面,所以他不会丢失 javascript 上下文,因为我认为这比为每个请求访问存储更有效,但我不不知道什么是最好的方法 security-wise,或者开发人员通常做什么?
从安全的角度来看没有区别;两者都不比另一个更安全。
如果您只在执行 ajax 调用时需要令牌,请不要担心从 sessionStorage
获取令牌的开销。该操作根本不会花费任何重要时间,当然不会与执行 ajax 调用相比。如果您在紧密循环中使用它来执行数千次(或可能数十万次)操作,而用户等待它们,则只需要将结果缓存在变量中。出于 其他 原因(例如,方便),您可能希望它在变量中,但在您描述的情况下没有效率参数。
一般规则:遇到性能问题时担心性能(但是,您知道,不要完全愚蠢地做一些您知道效率极低的事情...) . :-)
首先要做的事情 - 如果您要加载 任何 第三方 JS,请不要使用 local/session 存储来存储任何敏感数据,包括令牌(JWT
s 我猜?)。这种类型的存储是完全不受保护的;您页面上的任何 JS 运行 都可以访问它。一旦任何第 3 方脚本受到损害,您的应用程序也会受到损害(可能会将您的所有用户 session 数据发送给攻击者)。 JWT
在某种程度上相当于用户名 + 密码,应该这样处理。使用 secure
httpOnly
cookie 传输 JWT
或存储 session 数据 server-side 并使令牌成为签名的 session cookie。
访问 local/session 存储的开销可以忽略不计。但是,如果您非常担心性能,请在应用程序初始化时将令牌加载到变量(或某种服务或存储)中,使用它构建 Authorisation
header 并仅在以下情况下访问存储令牌更改。
另外,这里取个峰:
https://dev.to/rdegges/please-stop-using-local-storage-1i04
https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage
希望对您有所帮助 :-)