Security 用于API安全的Cookies与访问令牌

Security 用于API安全的Cookies与访问令牌,security,cookies,access-token,api-design,Security,Cookies,Access Token,Api Design,我正在设计一个API,因此正在寻找解决方案来保护它。 我看到这篇文章: 这是旧的,但我认为它仍然相关。然而,有些事情我还不太明白,因为我对这件事还是新手 在这篇文章中,guy写道,他没有保存并使用访问令牌直接从客户端调用API(这是不安全的,因为没有办法很好地保护访问令牌),而是设置了一个代理来保存令牌,然后为客户端发出加密cookies 我真的不明白为什么这样更安全。在这两种情况下,一旦攻击者窃取了访问令牌或cookie,就完成了。不是吗 我错过什么了吗 非常感谢。让代理充当依赖方并将访问令牌

我正在设计一个API,因此正在寻找解决方案来保护它。 我看到这篇文章:

这是旧的,但我认为它仍然相关。然而,有些事情我还不太明白,因为我对这件事还是新手

在这篇文章中,guy写道,他没有保存并使用访问令牌直接从客户端调用API(这是不安全的,因为没有办法很好地保护访问令牌),而是设置了一个代理来保存令牌,然后为客户端发出加密cookies

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

我错过什么了吗


非常感谢。

让代理充当依赖方并将访问令牌隐藏在其中并没有什么好处

即使代理向客户端发出加密cookie,这些cookie仍然链接到一个域,并与向该域发出的任何请求一起发送。因此,如果用户的浏览器中运行了恶意应用程序,并且该应用程序调用了受保护的API,那么它将能够在登录到合法应用程序时利用cookie集

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

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

  • 它允许您开始在服务器端构建符合OAuth2/OIDC的API,而不是使用基于cookie的身份验证,因此有助于复杂环境中的迁移/升级场景
  • cookie方法可用于出于任何原因无法支持OAuth2/OIDC的第三方应用程序或库。(但如果无法妥善固定,您可能应该远离这些设备。)
如果您想保护客户端上的访问令牌,我建议更安全的方法之一是将其作为变量存储在应用程序中(即内存中),而不是将其持久化到本地或会话存储。这将阻止另一个应用程序通过JavaScript访问它,并且您完全可以控制访问令牌何时提交到API,这与浏览器透明处理的cookie不同