【问题标题】:why isn't it possible to steal an access token?为什么不能窃取访问令牌?
【发布时间】:2026-01-02 18:45:02
【问题描述】:

我正在学习 OAuth,但我脑子里有个问题,我找不到答案..

我了解请求令牌授权或不授权应用程序使用 API。但是一旦用户获得了访问令牌,如果有人窃取了他的访问令牌会发生什么?

假设我们有类似http://www.example.com/api/article/1?access_token=******access_token******

如果我将此 URL 提供给其他用户,其他用户将拥有我的访问权限,因此 API 不再受到保护?

【问题讨论】:

  • 您应该澄清您指的是 OAuth 1 还是 OAuth 2。协议的版本 1 使用共享密钥,即令牌密钥,它永远不会通过网络传输。因此,窃取访问令牌就像窃取没有密钥位的密钥。它不适合任何锁。
  • 我正在阅读有关 oAuth 2 的信息,只是想知道同样的事情。希望这里有答案..叹息..搜索继续。

标签: security oauth access-token


【解决方案1】:

简短回答:是的,对于 OAuth2 - 任何拥有有效 access_token 的人都可以访问该令牌指定的资源。多久取决于 OAuth2 提供者的实现。

关于 OAuth1 和 2 的长答案:

当涉及到OAuth 1 访问令牌是不够的。您还需要访问令牌秘密以及消费者密钥和秘密。将访问令牌保密并限制其有效范围和时间仍然很好,但是如果没有客户端和令牌机密,您将无法使用访问令牌。 OAuth 1 不要求您使用 SSL,因为加密技术已内置于规范中。

OAuth 2 不同 - 可以说,对访问令牌保密更为重要。因此,API 提供者应确保访问令牌(在 OAuth2 中也称为承载令牌)仅在尽可能短的时间内有效。这些令牌就像密码一样工作,如果被拦截,攻击者可以立即使用。因此,OAuth2(带有不记名令牌)规范要求所有通信都通过 SSL 进行 - 因为规范中没有内置密码学。通常访问令牌的有效期很短,可以使用“刷新令牌”进行刷新,该令牌有效期更长,但仅在消费者收到初始不记名令牌以及刷新不记名令牌时才会传输。

【讨论】:

  • OAuth 2.0 本身实际上并没有定义任何访问令牌类型。这是由处理令牌认证的其他规范完成的。目前有两种提议,一种是承载令牌,必须通过 TLS 使用并且像密码一样工作,另一种是非常类似于 OAuth 1.0 HMAC-SHA1 的 MAC 令牌。
  • 谢谢,我在上面的答案中包含了这些陈述。