在使用 PKCE 的 OAuth 2.0 授权代码流程中,是什么阻止在第一次调用身份验证服务器时拦截代码质询?

2024-01-25

想象一下这次攻击

  1. 攻击者拦截对授权服务器的第一次调用,然后进行代码挑战。 (图中的步骤1)
  2. 攻击者现在使用授权代码拦截来自授权服务器的响应。 (图中的步骤2)
  3. 然后攻击者可以 POST 授权代码和代码验证程序来获取访问令牌。 (步骤3)

Refer to this diagram: flow:enter image description here

问题

  1. 什么可以阻止攻击者拦截对授权服务器的第一次调用?这就是让授权码 + PKCE 比隐式流更安全的目的。

  2. 也许调用被拦截并不重要,因为代码挑战已被散列,因此攻击者没有第二次调用所需的代码验证器。但是如果代码挑战没有经过哈希处理怎么办?


PKCE 旨在解决从 URL 泄露访问令牌/授权代码的威胁,与拦截 SSL 流量的攻击者相比,这种威胁相对容易发生:

  • URL 在地址栏中可见
  • URL 保存在浏览器历史记录中
  • 在本机平台上,可以注册多个应用程序以使用相同的自定义 URI 方案

也就是说,建议代码挑战是代码验证者的 SHA256 哈希,因此即使攻击者拦截代码挑战,他们也无法在无法反转 SHA256 的情况下完成令牌交换。

另请参阅:PKCE 实际上保护什么? https://security.stackexchange.com/questions/175465/what-is-pkce-actually-protecting

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

在使用 PKCE 的 OAuth 2.0 授权代码流程中,是什么阻止在第一次调用身份验证服务器时拦截代码质询? 的相关文章

随机推荐

  • C# 组合框 GotFocus

    我有一个 C ComboBox使用 WPF 我有在以下情况下执行的代码ComboBox s GotFocus被激活 问题是GotFocus每次从以下位置进行选择时都会执行事件ComboBox 例如 GotFocus当您第一次点击时执行Com
  • 如何使用 MigLayout 在面板上绘制分隔符

    这是一个 MigLayout 新手问题 我想知道如何从标签末端跨面板宽度绘制分隔符 这是我的示例代码 package com ndh swingjunk import java awt import javax swing import n
  • 获取范围内的所有变量

    有没有办法获取当前在 JavaScript 范围内的所有变量 虽然大家都回答 No 我知道 不 是正确的答案 但如果你真的需要得到局部变量一个函数有一个受限的方式 考虑这个函数 var f function var x 0 console
  • Wireshark 中不显示 UDP 数据包

    我有一个嵌入式码头服务器 服务器1 它发送UDP数据包作为触发器来接收来自另一台服务器 服务器2 的消息 然后 server1 等待来自 server2 的消息 然后该消息将被验证并进一步处理 通过测试 server1 我发现有时 serv
  • 如何在单击消息上的任意位置时关闭 GROWL 消息? (JSF、Primefaces)

    如果用户单击 我需要关闭用户界面中的咆哮消息anywhere 在消息上 这是必需的 因为 Primefaces 中默认咆哮消息的关闭按钮对于用户来说很难找到 有办法做到这一点吗 通过CSS解决这个问题怎么样 ui growl icon cl
  • 如何使用简单的 HTML DOM 来抓取它 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 如何在 Rails 中响应通过 AJAX 发出的 HTML 请求

    我正在尝试编写一个 Rails 控制器方法 该方法将响应 正常 例如 跟随链接 和通过 ajax 发出的获取请求 正常情况 控制器应使用布局以完全修饰的 HTML 进行响应 Ajax 案例 控制器应使用模板生成的 HTML 片段进行响应 无
  • 使用 jfreechart 创建时间序列

    现在我想在 jfreechart 中创建一个时间序列图 然而 在线示例仅包含使用 日 月 等类的图表 所以我想本质上创建一个 XY 折线图 然而 我遇到的问题是 Jfreechart 没有按照添加数据点的顺序连接数据点 此外 它也不按照 X
  • 从图库中获取选定的图像到 imageview

    我在从图库中选择图像并将其设置到imageview 假设我有两项活动 mainActivity包含画廊按钮和secondactivity含有imageview其中必须显示图像 b1 setOnClickListener new OnClic
  • 当文件存在时,python os.path.exists 报告 False

    您好 有一个应用程序有时会报告文件不存在 即使它存在 我正在使用 os path exists 并且该文件位于已安装的网络共享上 我使用的是 OSX Yosemite python 2 7 9 并且我拥有该文件的访问权限 这是奇怪的事情 下
  • 使用 pandas 将每月数据表转换为季节性时间序列

    我有一些表格格式的数据 其中行是年 列是月 我想将其转换为 pandas 中的时间序列格式 然后按季节平均值对数据进行分组 我特别想将冬季定义为 11 月至 3 月 并放弃其他所有内容 这是我将数据读入表格格式的代码 这样您就可以看到发生了
  • Laravel 自身模型上的父/子关系

    我想要获得至少有一个孩子的所有优惠券 一张优惠券可以有多个优惠券孩子 但任何优惠券只能有一个父母 我使用以下模型和调用对其进行设置 并且它生成的查询是根据需要的 直到这一部分 vouchers parent id vouchers id 想
  • 关于减少分支未命中预测

    我在一篇论文中看到一句话 将分支转化为数据依赖 以避免分支预测错误 第6页 我想知道如何将代码从分支更改为数据依赖关系 这是论文 http www adms conf org p1 SCHLEGEL pdf http www adms co
  • Bootbox 确认对话框问题

    不幸的是 文档 Bootbox http paynedigital com 2011 11 bootbox js alert confirm dialogs for twitter bootstrap http paynedigital c
  • 如何在Python中创建元组的元组?

    我想结合 A 1 3 5 B 2 4 6 into C 1 2 3 4 5 6 python中有没有一个函数可以做到这一点 Yes tuple zip A B 这就是全部 结果如下 Python 2 x 和 3 x 中 gt gt gt t
  • VSCode 新手:通过 Docker 进行远程 Jest/Node 调试

    我最近从 Vim 切换到 VSCode 并且尝试为通过 docker 运行的玩笑测试设置 VSCode 调试 调试工作 有点 如果我想运行玩笑测试并激活断点 我需要 插入断点 通过以下方式开始运行相关的笑话测试vscode jest tes
  • 将本地对象推入列表

    我有课 class Invader public Invader Invader public void Init InvaderTypes invadertype CIw2DImage AlienImage void Update flo
  • 修改SQL Server中的XML以添加根节点

    首先 为了给出这个问题的一些背景知识 我正在重写一些当前循环遍历某些 xml 的代码 在每个循环末尾插入一个表 替换为一个接受 xml 参数的 sp 并在一个 sp 中进行插入继续 将 xml 分解 到表中 主碎片已成功完成 但目前其中一列
  • iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决

    请仅在运行 ios 7 的 iPad 上进行测试 iOS 7 似乎不支持 iPad 上 onchange 事件的alert 和confirm 奇怪的是 它可以在运行 ios 7 0 的 iPhone 4s 和桌面浏览器上运行 但不能在运行
  • 在使用 PKCE 的 OAuth 2.0 授权代码流程中,是什么阻止在第一次调用身份验证服务器时拦截代码质询?

    想象一下这次攻击 攻击者拦截对授权服务器的第一次调用 然后进行代码挑战 图中的步骤1 攻击者现在使用授权代码拦截来自授权服务器的响应 图中的步骤2 然后攻击者可以 POST 授权代码和代码验证程序来获取访问令牌 步骤3 Refer to t