谷歌专门指的是访问令牌。
在 OAuth 2.0 的上下文中,混淆代理问题适用于用于身份验证时的隐式授权协议流。Google 称之为“客户端应用程序的 OAuth 2.0”是基于隐式授权协议流。
由于隐式流程通过 URI 片段向最终用户公开访问令牌,因此它引入了访问令牌可能被篡改的可能性。合法应用程序(OAuth 客户端)可以通过接受颁发给不同(恶意)应用程序的访问令牌而成为困惑的代理,从而使攻击者可以访问受害者的帐户。
验证访问令牌的关键步骤是应用程序验证访问令牌最初不是颁发给不同的应用程序。当他们说:
注意:验证令牌时,确保响应中的受众字段与您在 API 控制台中注册的 client_id 完全匹配至关重要。这是混淆代理问题的缓解措施,执行此步骤绝对至关重要。
作为一个简化的示例,假设有两个应用程序:(1) FileStore,一个合法的文件存储应用程序,和 (2) EvilApp。这两个应用程序都使用 Google 的客户端应用程序身份验证流程。Alice 是一个无辜的最终用户,她的 Google 用户 ID 是 XYZ。
- Alice 使用 Google 登录 FileStore。
- 在身份验证过程之后,FileStore 为 Alice 创建一个帐户并将其与 Google 用户 ID XYZ 相关联。
- Alice 将一些文件上传到她的 FileStore 帐户。到目前为止一切都很好。
- 后来,Alice 登录了 EvilApp,它提供的游戏看起来很有趣。
- 结果,EvilApp 获得了与 Google 用户 ID XYZ 关联的访问令牌。
- EvilApp 的所有者现在可以为 FileStore 构造重定向 URI,插入它为 Alice 的 Google 帐户颁发的访问令牌。
- 攻击者连接到 FileStore,它会获取访问令牌并与 Google 核对以查看它是针对哪个用户的。谷歌会说它是用户 XYZ。
- FileStore 将允许攻击者访问 Alice 的文件,因为攻击者拥有 Google 用户 XYZ 的访问令牌。
FileStore 的错误在于没有向 Google 验证它所提供的访问令牌确实是颁发给 FileStore 的;令牌确实是发给 EvilApp 的。
其他人比我更优雅地描述了这一点:
我希望这能解释为什么使用客户端应用程序验证访问令牌的一部分,以及它与混淆代理问题的关系。