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

时间:2016-10-28 16:50:15

标签: security authentication web-applications oauth2 refresh-token

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

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

我认为没关系因为:

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

实际上,您可以将令牌存储在浏览器中,您只需要知道哪种存储机制更适合您的解决方案。例如,在本地存储中,最不安全的是,如果您的后端和“单页应用”位于同一域,那么我建议您使用Cookie。

Auth0网站对此有一些建议:

  

我们建议使用Auth0单页App SDK。 Auth0 SPA SDK   为您处理令牌存储,会话管理和其他详细信息。

有关更多详细信息,请单击here