为什么我不能在浏览器中存储oauth刷新令牌?

Mar*_*ley 10 security authentication web-applications oauth2 refresh-token

我想在浏览器中存储oauth刷新令牌.我想将它存储在那里的原因是应用程序可以刷新访问令牌并让用户不间断地继续他们的会话.我还想消除服务器上存储令牌的任何缓存的需要,从而使其成为有状态的.

我被告知在浏览器中存储刷新令牌是错误的,因为它不安全.

我认为没关系,因为:

  • 令牌将存储在httpOnly,安全会话cookie中,因此它们不应容易受到中间攻击中的XSS或人员的攻击,并且当用户关闭其会话时它们将被丢弃.
  • 与服务器的所有通信都通过HTTPS完成
  • 如果检测到可疑活动,则刷新令牌可以无效
  • 最重要的是,除非您知道仅由服务器知道的客户机密钥,否则您无法使用刷新令牌.

我认为它应该没问题我错了吗?请解释原因!

Gab*_*yel 6

将令牌存储在httpOnly中,安全 cookie可能是您可以实现安全性最好的.问题有时是由于其他(非安全)原因,httpOnly cookie不够好,因为Javascript显然没有访问权限(这就是重点).因此人们有时希望在其他浏览器商店(如localStorage)中存储令牌,或者稍微好一点,在JavaScript对象中存储令牌,这两者都比httpOnly cookie安全性低得多(但对于某些应用程序来说仍然足够好).

将令牌存储在httpOnly和安全cookie中使其几乎等同于会话ID,并且其安全性在这方面也是相同的(显然其他方面可能不同).