【问题标题】:Is there any downside to storing an API key in a browser cookie?在浏览器 cookie 中存储 API 密钥有什么缺点吗?
【发布时间】:2013-07-19 20:52:30
【问题描述】:

我们有一个带有 json API 的应用。我们在浏览器中使用 Javascript 向其发送 ajax 调用。每个 API 调用都需要一个 API 密钥。

我计划实现一个登录 API,它接受用户名和密码并返回该特定用户的 API 密钥。密钥将进入 cookie 并随每个 API 请求传回。 (您仍然可以将它包含在 json 请求中;cookie 将是一个后备。)

这个方案的最大好处是我们不需要在服务器端维护会话。服务器端的一切都是无状态的。当您在集群环境中时,无状态操作具有显着优势。

这是个坏主意吗?它安全吗?有没有更好的办法?

假设我们在 https 上运行。

【问题讨论】:

  • 我相信会使用户容易受到会话劫持的影响。

标签: javascript api security


【解决方案1】:

不,您提到的方式是,即使您使用 https,您的 API 密钥也不安全。这是因为 API 密钥现在存在于您的浏览器中,并且很容易被浏览器插件、脚本等暴露。

这里要考虑的另一件事是您的令牌的有效期。在这种情况下,建议使用较短的 API 令牌过期时间。

幸运的是,很多人都有相同的要求,并且 OAuth 2 规范针对您提到的用例提供了一个隐式授权案例流程。您可以查看并决定您的方法,

https://www.rfc-editor.org/rfc/rfc6749#section-4.2

【讨论】:

    【解决方案2】:

    如果您不需要对旧版浏览器的支持,并且您只需要访问 api 密钥客户端,那么您可以使用本地存储,这样您就不必向服务器发送 cookie 和从服务器发送 cookie,并且没有可以被盗的cookie。

    【讨论】:

    • 你仍然可以通过 XSS 或嗅探 api 请求来窃取它。与 cookie 方法没有太大区别,只是不会发送到不需要密钥的页面。
    猜你喜欢
    • 2013-07-16
    • 2022-01-26
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2021-06-29
    • 2021-06-04
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多