Google OAuth 令牌验证如何以及为何执行?

2023-12-23

当 Google OAuth 文档指示我在访问令牌、刷新令牌、范围、受众和客户端 ID 之间进行操作时,我感到很困惑验证所有令牌 https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken以防止副手混乱的问题。维基百科文章链接到 http://en.wikipedia.org/wiki/Confused_deputy_problem仅描述了较高级别的一般问题,而不是特定于 OAuth 甚至网络身份验证。如果我理解正确的话,令牌验证甚至不是 OAuth2 的一部分,但实际上取决于具体的实现。所以这是我的问题:

Google OAuth 令牌验证如何以及为何执行?

在这种情况下,混淆代表问题的具体例子将受到特别赞赏。另请注意,我是在完全客户端应用程序的背景下提出这个问题的,如果这有什么不同的话。


谷歌特意指的是access token.

在 OAuth 2.0 的背景下,混淆代理问题适用于隐式授予协议流程 https://www.rfc-editor.org/rfc/rfc6749#section-4.2当用于验证。 Google 所谓的“客户端应用程序的 OAuth 2.0”基于隐式授权协议流程。

由于隐式流通过 URI 片段向最终用户公开访问令牌,因此存在访问令牌被篡改的可能性。合法应用程序(OAuth 客户端)可以通过接受颁发给不同(恶意)应用程序的访问令牌来成为混乱的代理,从而使攻击者能够访问受害者的帐户。

验证访问令牌的关键步骤是应用程序验证访问令牌最初不是颁发给其他应用程序的。当谷歌说时,请注意这一点 https://developers.google.com/accounts/docs/OAuth2UserAgent#validatetoken:

注意:验证令牌时,确保响应中的受众字段与您在 API 控制台中注册的 client_id 完全匹配至关重要。这是解决代理混乱问题的缓解方法,执行此步骤绝对至关重要。

作为一个简化的示例,假设有两个应用程序:(1) FileStore,一个合法的文件存储应用程序,以及 (2) EvilApp。这两个应用程序都使用 Google 的客户端应用程序身份验证流程。 Alice 是一位无辜的最终用户,她的 Google 用户 ID 是 XYZ。

  1. Alice 使用 Google 登录 FileStore。
  2. 身份验证过程完成后,FileStore 为 Alice 创建一个帐户,并将其与 Google 用户 ID XYZ 关联。
  3. Alice 将一些文件上传到她的 FileStore 帐户。到目前为止一切都很好。
  4. 后来,爱丽丝登录了 EvilApp,它提供的游戏看起来很有趣。
  5. 结果,EvilApp 获得了与 Google 用户 ID XYZ 关联的访问令牌。
  6. EvilApp 的所有者现在可以构建 FileStore 的重定向 URI,插入为 Alice 的 Google 帐户颁发的访问令牌。
  7. 攻击者连接到 FileStore,FileStore 将获取访问令牌并与 Google 核实以了解它适用于哪个用户。 Google 会说它是用户 XYZ。
  8. FileStore 将使攻击者能够访问 Alice 的文件,因为攻击者拥有 Google 用户 XYZ 的访问令牌。

FileStore 的错误在于没有向 Google 验证所提供的访问令牌是否确实颁发给 FileStore;代币确实是发给EvilApp的。

其他人对此的描述比我更优雅:

  • http://www.thread-safe.com/2012/02/more-on-oauth-implicit-flow-application.html http://www.thread-safe.com/2012/02/more-on-oauth-implicit-flow-application.html
  • http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html
  • https://www.rfc-editor.org/rfc/rfc6749#section-10.16 https://www.rfc-editor.org/rfc/rfc6749#section-10.16

我希望这能解释why客户端应用程序访问令牌验证的一部分,以及它与混乱的代理问题的关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google OAuth 令牌验证如何以及为何执行? 的相关文章

随机推荐

  • Python 中的似然比测试

    我在 Python 2 7 中计算似然比检验时遇到问题 我有两个模型和相应的似然值 我相信比较模型 L2 是否优于模型 L1 如果模型密切相关 的规则是查看 2 log L2 L1 然后我想找到对应于 2 log L2 L1 的 p 值 并
  • 在 Internet Explorer 10 中将文本保存到本地文件中

    我需要能够将字符串保存到本地文件中 基于中的代码here http thiscouldbebetter wordpress com 2012 12 18 loading editing and saving a text file in h
  • 当我确定我的函数已定义时,为什么我会在错误控制台上看到“函数未定义”?

    我使用的代码应该根据单选按钮选择更改表单的 操作 属性 目前不起作用 我正在尝试找出原因 根据我的 Firefox 错误控制台 函数 submitForm 未定义 但我确信它已定义 有人可以帮忙吗 代码如下 头部内部 q1 指单选按钮的名称
  • PHP/MYSQLI:PHP 中 mysqli_query 失败

    首先 我是 mysql i 语言的菜鸟 只知道 PHP 的基础知识 注意 我不管理或拥有 无权访问当前托管网页的服务器 但是我可以访问 phpMyAdmin 页面 也就是说 我有一个网页 我正在上面尝试一些东西 现在我正在尝试创建一个链接到
  • 更改 ggplot2 中条带文本背景的高度无法按预期工作

    Load libraries library ggplot2 library gtable Build plot d lt ggplot mtcars aes x gear geom bar aes y gear stat identity
  • 如何在测试查找期间将 MavenProject 注入到 mojo 中?

    这是我的测试 maven plugin testing harness 3 3 0 junit 5 6 2 import java io File import org apache maven plugin testing Abstrac
  • 禁止删除 git 中的 master 分支

    我正在尝试设置一个 git hook 来禁止任何人删除master alpha and beta我们存储库的分支 有人能帮忙吗 我从来没有做过 git hook 所以我不想在没有一点帮助的情况下尝试自己开发自己的 git hook 直接用一
  • CloudFormation——可以有嵌套映射吗?

    是否可以在 CloudFormation 中嵌套映射 如下例所示 Mappings Regions us east 1 Environments dev ImageId something Subnet something qa
  • 如何进行 F# 测量以获得加速

    假设单机有8核 在 Haskell 中 您可以使用以下命令进行编译threaded选项 然后在运行时使用 RTS Nx指定要使用的核心数量 例如 myprg args sequential run myprg args RTS N1 par
  • proguard.cfg 文件丢失

    阅读 proguard 上的文档 安卓文档 http developer android com tools help proguard html 我应该有一个 ProGuard cfg 正如它所说 当你创建Android项目时 会在项目根
  • 使用 boto 从 dynamodb 获取唯一哈希键值列表

    我想获取 dynamodb 表的唯一哈希键值列表 我目前知道的唯一方法是扫描整个表 然后迭代扫描 更好的方法是什么 rs list table scan range eq rangevalue for i in rs print i pri
  • 自定义域验证是否在 Azure 订阅之间共享?

    我注意到 在我的 Azure 订阅中的许多应用程序服务 应用程序服务计划和 Azure 区域中 自定义域验证 ID 的值似乎是相同的 我看不到任何关于是否证实这一观察结果的文件 自定义域验证是否在 Azure 订阅之间共享 I m refe
  • 编码 URL 后出现 HTTP 404 错误

    当我使用 HttpUtility UrlEncode 对 Url 进行编码时 我最终收到服务器错误 ASP NET 代码 NavigateUrl 网址 http localhost UITest MM UpdateMember aspx 3
  • 按组计算唯一值

    DATA data frame TRIMESTER c 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 STUDENT c 1 2 3 4 5 6 7 1 2 3 5 9 10 11 3 7 10
  • Mean.io 框架与 socket.io

    如何在 Mean io 堆栈中使用 socket io 首先 Mean io 非常定期地更改其文件夹结构 所以我的问题是配置 socket io 的最佳位置在哪里 还是使用express io更好 其次 我仍然不太确定在哪里寻找告诉mean
  • 如何在 Clojure 中迭代向量的向量?

    我有一条包含 3 个属性的消息 类型 货币和金额 我有一个具有 4 个属性的规则 目的地 消息类型 货币和金额 我想检查我的规则并在消息类型上找到与消息匹配的消息并返回目的地 如果没有匹配则返回 null 我使用向量作为消息和规则中字段的固
  • Django 中的 Apscheduler Job 执行两次

    计划的作业执行两次 差异以纳秒为单位 我有一个任务如下task py def print hello print time gt datetime datetime now print hello def print world print
  • 指定制表符宽度?

    显示空白时是否可以定义制表符宽度 例如在 标记或其他内容内 我找不到任何可以用 CSS 做到这一点的东西 但这似乎是一件很常见的事情 就我而言 选项卡宽度太宽 导致页面上的一些代码片段太宽 如果我能以某种方式缩短选项卡宽度以使其适合没有滚动
  • 在 PHP 中将二进制字节数组转换为图像

    我有一个 Java 网络服务 它返回所请求的文件内容byte 字节数组 形式 有时这些文件是 HTML 文件 有时是图像 文件类型没有限制 我正在寻找一种方法将此数组转换为有效的图像 字符串 我的working for text文件如下 b
  • Google OAuth 令牌验证如何以及为何执行?

    当 Google OAuth 文档指示我在访问令牌 刷新令牌 范围 受众和客户端 ID 之间进行操作时 我感到很困惑验证所有令牌 https developers google com accounts docs OAuth2UserAge