Jwt 为什么auth0建议不要在localStorage中存储令牌?
Auth0提供了描述身份验证最佳实践的广泛资源列表。其中有一系列建议,就是不要将Jwt 为什么auth0建议不要在localStorage中存储令牌?,jwt,single-page-application,auth0,Jwt,Single Page Application,Auth0,Auth0提供了描述身份验证最佳实践的广泛资源列表。其中有一系列建议,就是不要将localStorage用作平均存储(JWT)令牌 我发现这些观点存在一些问题: 有一种强烈的假设,即JWT令牌是攻击者不能访问的敏感信息(通过XSS) 从我的角度来看,访问令牌本身并不会扩大攻击范围。如果攻击者控制了受害者的浏览器,他们可以使用令牌从受影响的浏览器本身执行调用 访问令牌通常具有相当短的过期时间,并且可以通过浏览器固定,从而减少在XSS上下文之外使用它们的机会 Auth0建议从他们的S
localStorage
用作平均存储(JWT)令牌
- 有一种强烈的假设,即JWT令牌是攻击者不能访问的敏感信息(通过XSS)
- 从我的角度来看,访问令牌本身并不会扩大攻击范围。如果攻击者控制了受害者的浏览器,他们可以使用令牌从受影响的浏览器本身执行调用
- 访问令牌通常具有相当短的过期时间,并且可以通过浏览器固定,从而减少在XSS上下文之外使用它们的机会
- Auth0建议从他们的SDK中使用
来获取令牌,但据我所知,攻击者没有任何理由不能自己调用此方法(即注入另一个SDK脚本,使用现有的客户端密钥,然后从那里调用getToken),因此,获取令牌的方式与存储在Auth0.getTokensilenly()
localStorage
- 我知道XSS无法访问令牌的唯一方法基本上是使用httpOnly Cookie,但这会自行创建新向量(CSRF),并且仍然无法阻止攻击者从受影响的浏览器中调用api
因此,我完全同意OWASP的建议,不要将敏感数据存储在
localStorage
,我永远不会想到在那里存储信用卡号码或密码,甚至个人数据。但这只是因为这些东西会让攻击者扩大攻击范围(访问银行帐户,尝试在其他应用程序中重用用户密码,等等)。但是我很难理解AccessToken是如何受到影响的。尽管我对Auth0的实现、功能和设计决策知之甚少,但从我对OAuth2和安全性的总体理解来看,我可以尝试将这些点连接起来
单个建议本身并不能提供足够的安全性或所需的功能,但当与其他相关建议结合使用时,我们可以达到所需的安全性和行为级别 让我们看一下你提出的要点 从我的角度来看,访问令牌本身并不会扩大攻击范围。如果攻击者控制了受害者的浏览器,他们可以使用令牌从受影响的浏览器本身执行调用
localstorage
的问题是:
localStorage
和sessionStorage
不跨子域共享。这是SSO功能的最佳选择(有一些解决方案使用了iframe
,但这些解决方案看起来更像是解决办法,而不是一个好的解决方案。当使用响应标题X-Frame-Options来避免使用iframe
的点击劫持攻击时,使用iframe
的任何解决方案都是毫无疑问的)localstorage
Auth0建议从他们的SDK中使用Auth0.getTokenSilently()来获取令牌,但据我所知,攻击者没有任何理由不能自己调用此方法
对。这就是为什么
getTokenSilently()
方法要求在仪表板的API设置中启用允许跳过用户同意。虽然我没有看到关于这一点的具体指南,但我认为如果您将令牌存储在cookie中,则不需要启用此选项,从而消除滥用该方法的任何可能性
SameSite
cookie。参考文件。如果浏览器不支持SameSite
cookie,请遵循下面的另一种方法