Cookies与访问令牌的API安全性

时间:2019-03-01 15:19:39

标签: security cookies access-token api-design

我正在设计一个API,因此正在寻找解决方案来保护它。 我碰到了这篇文章:https://github.com/alexbilbie/alexbilbie.github.com/blob/master/_posts/2014-11-11-oauth-and-javascript.md

这很老,但我认为它仍然有意义。但是,有些事情我不太了解,因为我对此还很陌生。

在那家伙写的文章中,他保存并使用访问令牌从客户端直接调用API(这是不安全的,因为没有办法很好地保护访问令牌),他建立了一个代理来保存令牌,然后为客户端发出加密的cookie。

我真的不明白为什么这种方式更安全。在这两种情况下,一旦攻击者窃取了访问令牌或cookie,就完成了。是不是

我想念什么吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

让代理充当依赖方并在其中隐藏访问令牌也没有太大好处。

即使代理将加密的cookie发送给客户端,这些cookie仍将链接到域,并随对该域的任何请求一起发送。因此,如果用户的浏览器中运行着恶意应用程序,并且该应用程序调用了受保护的API,则当登录到合法应用程序时,它将能够背负cookie集。

(对于长时间会话持续数小时或数天或更长时间的应用程序,这甚至是一个问题。)

我从这种方法中看到的唯一次要好处是:

  • 它使您可以开始在服务器端构建符合OAuth2 / OIDC的API,而不必使用基于cookie的身份验证,因此可以帮助解决复杂环境中的迁移/升级情况。
  • cookie方法可与出于任何原因不支持OAuth2 / OIDC的第三方应用程序或库一起使用。 (但是,如果无法正确保护它们,也许您应该远离这些。)

如果您想保护客户端上的访问令牌,我建议一种更安全的方法是将其作为变量存储在您的应用程序中(即在内存中),而不是将其持久化到本地或会话存储中。这样就可以阻止JavaScript被另一个应用程序访问,并且完全可以控制何时将访问令牌提交给API,这与浏览器透明处理的cookie不同。