【问题标题】:Cookies vs Access Token for API security用于 API 安全的 Cookie 与访问令牌
【发布时间】:2019-07-23 15:44:48
【问题描述】:

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

这是旧的,但我认为它仍然相关。但是有些东西我不太明白,因为我还是新手。

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

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

我错过了什么吗?

非常感谢。

【问题讨论】:

    标签: security cookies access-token api-design


    【解决方案1】:

    让代理充当依赖方并将访问令牌隐藏在其中并没有真正的好处。

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

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

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

    • 它允许您开始在服务器端构建符合 OAuth2/OIDC 的 API,而不是使用基于 cookie 的身份验证,因此有助于复杂环境中的迁移/提升场景。
    • cookie 方法可用于出于某种原因不支持 OAuth2/OIDC 的第三方应用程序或库。 (但如果无法妥善保护它们,也许你应该远离它们。)

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

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2015-11-16
      • 2014-10-30
      • 2019-02-18
      • 2018-10-16
      • 2012-09-11
      • 1970-01-01
      • 2011-11-15
      • 2015-06-26
      相关资源
      最近更新 更多