对 OAuth 的访问令牌保密有多重要?

Posted

技术标签:

【中文标题】对 OAuth 的访问令牌保密有多重要?【英文标题】:How important is it to keep OAuth's access token secret? 【发布时间】:2011-05-03 05:07:39 【问题描述】:

一旦我收到使用 OAuth 的网站(比如 facebook)的访问令牌,保守这个秘密有多重要?如果有人抓住了它,会发生什么恶意吗?

我想知道将令牌保存在 cookie 或会话中是否是个坏主意。

【问题讨论】:

您可能不想存储在 cookie 中,但会话是可以的。这个想法是 cookie 被认为是“用户输入”并且是不可靠的(除非使用签名的 cookie),这意味着您在技术上必须查询您的用户数据库以验证访问令牌在使用之前是否有效。在大多数 Web 框架中,会话级别的会话 ID 已经这样做了。 除了有效性我更担心安全性。所以我拿了我从 facebook 获得的 access_token 并在另一台计算机上运行 curl -F 'access_token=162032318056|2.0r19NN8CJ3qiz2e0dA_G6w__.3600.1288576800-6423201|q7GD-dWTEvWoqEZjZ77Ga_ddhwA' -F 'message=TEST' @墙。所以我担心恶意用户能够读取某人的 cookie,获取他们从站点获得的访问令牌,然后能够在某人的 facebook 帐户上运行特权命令。从这个测试看来这是可能的 布拉德,你找到解决办法了吗?除了会话或 cookie,还有什么地方可以存储它?每次用户登录时将其保存在数据库中,然后查询它似乎充其量是一个麻烦的想法...... 【参考方案1】:

是的,访问令牌等同于您的用户名/密码。大多数实现会在一段时间后使访问令牌过期,但当它仍然有效时,它必须保密。

【讨论】:

【参考方案2】:

更新:如果您让用户连接到 javascript sdk,则用户 ID 和访问令牌已经存储在您网站的 cookie 中。检查正在发送的 http cookie。如果不是,请查看FB.Init 文档,因为FB.Init 有一个cookie 布尔参数,您可以设置它以便为您创建一个名为fbs_APPID 的cookie。 This 帖子谈到了那个 cookie。

【讨论】:

似乎一旦我获得了 access_token,我就不需要任何其他密钥来做特权事情了。我想我会更乱的。谢谢!

以上是关于对 OAuth 的访问令牌保密有多重要?的主要内容,如果未能解决你的问题,请参考以下文章

使用正确的访问令牌访问 OAuth2 保密资源时遇到问题

为啥我必须对注册令牌保密?

如何在托管在 GitHub 上的 Python 脚本中保密开发人员密钥

如何在托管在 GitHub 上的 Python 脚本中保密开发人员密钥

如何在使用 OAuth2 的资源所有者密码凭据授予类型时对客户端凭据保密

系统架构设计 - 系统安全性和保密性设计