我正在使用React SPA、Express、Express-session、Passport和JWT。我对存储令牌的一些不同的客户端存储选项感到困惑:cookie、Session和JWT/passport。
是否必须将令牌存储在cookie中,即使我可以将它们存储在req.sessionid
中?
jwt.sign(
payload,
keys.jwt.secretOrPrivateKey,
{
expiresIn:keys.jwt.expiresIn // < i dont know what is this expired for cookies or localstorage ?
}, (err, token) => {
res.redirect(keys.origin.url + "?token=" + token);
});
我真的可以通过使用sessionID(没有cookie或localstorage)来存储与会话相关的所有内容吗?
只有做一次fetch,或者每一页刷新和检索数据,然后保存到redux,因为我使用React SPA。
这个答案基于无状态方法,因此它不讨论传统的会话管理
你问了两个完全不同的问题:
LocalStorage
和SessionStorage
不在子域之间共享。因此,如果我们有两个SPA在不同的子域上运行,我们将无法获得SSO功能,因为一个应用程序存储的令牌对组织内的另一个应用程序不可用。有一些使用iframe
的解决方案,但它们看起来更像是变通办法,而不是好的解决方案。当响应标头x-frame-options
用于避免使用iframe
进行点击jacking攻击时,使用iframe
的任何解决方案都是不可能的。
但是,可以通过使用指纹(如OWASP JWT备忘单中提到的)来降低这些风险,而指纹又需要cookie。
指纹的思想是,产生一个密码学上强的字节随机字符串。然后,原始字符串的Base64字符串将存储在httponly
、secure
、samesite
cookie中,其名称前缀为__secure-
。应该根据业务需求使用域和路径属性的正确值。该字符串的SHA256哈希也将在JWT的声明中传递。因此,即使XSS攻击将JWT访问令牌发送到攻击者控制的远程服务器,它也不能发送cookie中的原始字符串,因此服务器可以基于cookie的缺失拒绝请求。XSS脚本无法读取cookiehttponly
。
httponly
cookie。问题内容: 我正在使用ExpressJS,Mongodb(Mogoose)构建应用程序。应用程序包含访问用户之前必须对其进行身份验证的路由。 目前,我已经编写了一个快速的中间件来做同样的事情。在这里,借助JWT令牌,我正在进行mongodb查询以检查用户是否已通过身份验证。但是感觉这可能会在我的数据库上增加不必要的请求负载。 我应该针对此特定任务集成redis吗? 会改善API性能吗?还是应该继续
在处理基于浏览器的应用程序时,关于安全存储JWT令牌的主题已经提出了很多问题。大家一致认为,应该使用仅限http的安全cookie。然而,当涉及短期访问令牌和长期刷新令牌时,存储JWT令牌似乎存在许多变化。 我发现了以下变化: 1.仅将JWT访问令牌和刷新令牌存储在http安全cookie中 赞成的意见: 无法从Javascript访问访问令牌和刷新令牌 欺骗: 引入CSRF漏洞,因此也必须添加C
Stormpath 中有很多博客文章讨论了您应该如何使用 cookie 而不是 sessionStorage/localStorage 来存储您的 JWT: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage https://stormpath.com/blog/token-auth-sp
问题内容: 我正在一个应用程序中工作,该应用程序需要在用户登录期间保留一些数据,但我有一个问题,localStorage,sessionStorage和cookie有什么区别? 我在问我可以使用什么来将某些数据持久化在DOM中,即使用户刷新页面,有人说:使用sessionStorage或localStorage,然后,有人想到了使用ngCookies的想法,因为它可以在每个浏览器,但是,我应该使用
我使用带有Angular 9的Spring boot和无状态会话实现。应用程序正在成功执行登录和注册功能。字符串引导在每个登录请求上生成令牌(JWT)。登录后,当我尝试运行第二个选项卡的应用程序时,它再次要求我登录。为了克服这个问题,我将令牌保存在LocalStorage,然后在单击另一个选项卡时,angular代码能够从LocalStorage中选择令牌。但是经过一些研发,我知道应该使用HTTP
为了使用JWT保护REST API,根据一些材料(如本指南和本问题),JWT可以存储在本地存储或Cookies中。根据我的理解: localStorage受XSS限制,通常不建议在其中存储任何敏感信息 对于cookie,我们可以应用“httpOnly”标志,以降低XSS的风险。然而,如果我们要从后端的Cookies中读取JWT,那么我们将受到CSRF的约束 因此,基于上述前提,最好将JWT存储在C