了解 PKCE 与授权代码授予的优势

2023-11-26

我是 OAuth 世界的新手,我试图了解使用 PKCE 相对于传统授权代码授予的好处。 (我的许多假设可能是错误的,所以感谢您的指正。)

我是一名移动应用程序开发人员,根据 OAuth 文档,客户端机密不能在公共客户端的应用程序代码中进行硬编码。避免对客户端密钥进行硬编码的原因是,黑客可以反编译我的应用程序并获取我的客户端密钥。

黑客掌握了我的客户秘密和我的重定向网址,可以开发假应用程序。如果最终用户 (User1) 下载真实应用程序和黑客的应用程序(两者),则虚假应用程序可以侦听真实应用程序回调并从中获取授权代码。通过授权代码(来自回调)和客户端密钥(通过反编译我的应用程序窃取),黑客可以获取授权令牌和刷新令牌,并能够获取 User1 的数据等。

如果其他用户下载真假应用程序,他们的数据也将面临危险。我对吗?黑客是否需要两者,或者他/她是否可以仅使用授权代码进行攻击?镜像第五步是否需要客户端密钥和授权码?

这种攻击称为拦截攻击。

Enter image description here

为了解决公共客户端应用程序中硬编码客户端密钥的问题,使黑客无法获取客户端密钥并窃取令牌,发明了 PKCE。使用 PKCE,客户端应用程序代码不需要对客户端密钥进行硬编码,因为 PKCE 不需要该信息来获取最终用户的令牌。

PKCE 流程创建一个随机字符串,将其转换为SHA-256哈希值并转换为 Base64。在图像的第二点中,该编码字符串被发送到身份验证服务器客户编号。然后,授权代码在回调中发送,如果任何恶意应用程序拦截该代码,它将无法获取令牌,因为图像的第五点需要由合法应用程序创建的原始随机字符串。

这很好,但如果不再需要客户端密钥来获取令牌来访问 User1 数据,我如何避免黑客开发一个假应用程序,该应用程序使用 PKCE 流和我的客户端 ID 并获取用户的令牌认为该应用程序是合法的?

由于图像的第五步不再需要客户端密钥来获取令牌,任何人都可以使用我的公共客户端 ID 开发虚假应用程序,如果任何用户下载虚假应用程序并执行 OAuth 流程,黑客就可以获取它的令牌并访问用户数据!

我对吗?


如果不再需要客户端密钥来获取令牌来访问 User1 数据,我如何避免黑客开发一个假应用程序,该应用程序使用 PKCE 流和我的客户端 ID 并获取认为该应用程序是合法的用户的令牌一?

OAuth 2.0 或 PKCE 无法防范“虚假应用程序”。

PKCE 确实可以防止设备上有恶意应用程序steal用于另一个应用程序的令牌。例如。想想银行应用程序,如果设备上的另一个应用程序可以获得银行应用程序正在使用的令牌,那就不好了。这就是您图片中所示的情况,并且 PKCE 可以缓解这种情况。

由于图像的第五步不再需要客户端密钥来获取令牌,因此任何人都可以使用我的公共客户端 ID 开发虚假应用程序。

移动应用程序cannot保护一个客户秘密,类似于 JavaScript 单页应用程序。因此这些客户是公共客户而不是保密客户根据 OAuth 2.0。仅有的保密客户可以保护一个客户秘密以安全的方式,只有那些应该使用客户秘密。 PKCE 是一种很好的技术公共客户但可能用于保密客户以及。

如果任何用户下载假冒应用程序并执行 oauth 流程,黑客就可以获取其令牌并访问该用户数据!

请联系 Apple Store 或 Google Play 商店查找“虚假应用程序”,或使用例如反恶意软件应用程序。这就是针对“虚假应用程序”的缓解措施。 PKCE 仅在同一设备上的另一个应用程序尝试窃取为另一个应用程序(例如银行应用程序)颁发的令牌时缓解这种情况。

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

了解 PKCE 与授权代码授予的优势 的相关文章

  • 如何在 access_token 中添加角色声明,目前它是在 id_token 中?

    我正在使用 PKCE 跟踪身份验证代码流 我的身份提供程序是 Azure Active Directory 我从应用程序注册创建了一个应用程序 客户端应用程序 在清单中 我添加了如下所示的 appRoles appRoles allowed
  • org.springframework.security.oauth2.common.exceptions.InvalidGrantException:凭据错误

    我正在开发Spring Boot 授权服务器 OAuth 资源服务器 在这个例子中 我可以通过邮递员轻松查询spring microservices oauth 服务器并获取受保护的数据 我创建了客户端来访问邮递员正在执行的数据 但我遇到了
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • 是否有一种加密技术可以将 8 位数字变成 10 或 11 位或更少的数字?

    我见过的许多加密技术都可以轻松加密一个简单的 8 位数字 如 12345678 但结果通常是 8745b34097af8bc9de087e98deb8707aac8797d097f 编造的 但你明白了 有没有办法加密这个 8 位数字 但生成
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 使用 OWIN Identity 注册来自多个 API 客户端的 Web API 2 外部登录

    我想要以下架构 我为本示例编写了产品名称 在一台服务器上运行的 Web API 2 应用程序 http api prettypictures com http api prettypictures com 在另一台服务器上运行的 MVC 5
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • Angular JS + Node JS + Passport + Spring OAuth2 身份验证/授权

    我是 PassportJS 和 AngularJS 的新手 我对如何进行此授权有疑问 我有由 Oauth2 保护的 Spring REST API 但我必须像这样一起发送用户凭据 http localhost 8080 myapp oaut
  • Spring Boot - 使用 JWT、OAuth 以及单独的资源和身份验证服务器

    我正在尝试构建一个使用 JWT 令牌和 OAuth2 协议的 Spring 应用程序 我的身份验证服务器正在运行 感谢本教程 https medium com nydiarra secure a spring boot rest api w
  • 限制对记录的访问。基于声明的权限是个好主意吗

    在 net 基于声明的身份框架中 如果我想限制用户对某个帐户 特定帐户 123456 执行操作 查看或编辑 我说的是商业实体 例如银行帐户 创建索赔是个好主意吗对于他们可以查看或编辑的每个帐户 一组中有很多索赔有什么缺点吗 系统管理员可能有
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 将 OAuth WRAP 访问令牌直接保存在客户端计算机上的 cookie 中吗?

    我计划建立一个可以访问 oauth 包装框架的网站 我正在考虑将访问令牌按原样存储在客户端计算机上 我不想在服务器上维护临时令牌等数据库 我应该做吗 或者我应该加密它 首先 为什么他们不使用 OAuth 2 0 您可以将 OAuth 凭据存
  • ASP.Net 中的不同身份验证方式

    我正在为我的公司开发一个网站 该网站可以在我们的内部网络和互联网上访问 有人问我一些对我来说似乎不可能的问题 但我想在真正说之前问这个问题 我们公司有两种类型的用户 一种是实际在 Active Directory 中注册的用户 等等 拥有
  • OAuth2 变量redirect_uri

    我们正在编写一个与 OAuth2 API 集成的插件 棘手的部分是 我们无法像大多数集成中那样对重定向 URI 进行硬编码 因为客户端可以在他们控制的任何域上安装此插件 例如 Wordpress 插件 并且访问令牌需要重定向回其自定义 ur
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • 从 HTTPS 重定向到 HTTP 的安全问题?

    我在一些博客上读过 抱歉没有提及参考资料 但我找不到了 如果您将用户从 https 页面重定向到 http 页面 您将失去保护网站安全的所有工作 那么 有人可以向我解释一下在以下情况下我是对还是错 在登录页面上使用 https 然后使用 h
  • MacOS 10.15 (Catalina) 中的 ASWebAuthenticationSession

    我正在尝试实施新的ASWebAuthenticationSession在 MacOS 10 15 中 我对callbackURLScheme 头文件为ASWebAuthenticationSession says 回调 URL 通常具有自定
  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进

随机推荐

  • 位置:相对有什么用?

    今天我在考虑 CSS 定位模式 发现我从来没有使用过position relative除了制作以外的任何事情position absolute处理子元素 我更像是一名 开发人员 而不是 设计师 但这些年来我已经完成了相当多的基于 CSS 的
  • GIT - 如何在所有分支中保持文件通用

    假设我在分支 master 中有一个文件 ChangeLog 我想记录有关此文件中任何分支中的所有更改的信息 比提交消息和其他描述性信息更详细 I git checkout b revA 执行编辑 更新ChangeLog 和git comm
  • TypeScript 中是否有类似于“keyof”的“valueof”?

    我希望能够将对象属性分配给给定键和值作为输入的值 但仍然能够确定值的类型 解释起来有点困难 所以这段代码应该可以揭示问题 type JWT id string token string expire Date const obj JWT i
  • MSSQL:选择在另一个表中出现两次以上的行

    基本上我需要获取在 StaffOnGrade 中出现次数超过 2 次的 CampaignTitles 列表 并列出 Grade 评级高于 2 的 CampaignTitle StaffNo 工作表 CampaignTitle StaffNo
  • 最新 iOS 更新 (12.2) 后,本地存储中的视频无法在 WebView (Xamarin.Forms) 中播放

    我有一个适用于 Android 和 iOS 的现有 Xamarin Forms 应用程序 它在 WebView 中显示本地存储中的一些 HTML 内容 目的是在离线时查看此内容 在最新的 iOS 更新 12 2 后 该 HTML 中的视频停
  • PHP:将curl_exec输出转换为UTF8

    我只想使用 UTF8 问题是我不知道每个网页的字符集 我怎样才能检测到它并转换为UTF8
  • 为什么Java API 使用int 而不是short 或byte?

    为什么使用Java APIint when short甚至byte就足够了吗 示例 DAY OF WEEK课堂上的田野Calendar uses int 如果差异太小 那么为什么这些数据类型 short int 到底存在吗 其中一些原因已经
  • Flask-sqlalchemy 列的最大值

    可以说我有一个这样的用户模型 from flask import Flask from flask ext sqlalchemy import SQLAlchemy app Flask name app config SQLALCHEMY
  • 您可以在 Emacs Lisp 宏中创建交互式函数吗?

    我正在尝试在 emacs lisp 中编写一个宏来创建一些 辅助函数 最终 我的辅助函数将比我这里的更有用 我意识到可能有更好 更直观的方法来完成同样的事情 请发帖 但我的基本问题是为什么这不起作用 我做错了什么 defmacro deft
  • Angular:禁用整个类(服务或组件)的更改检测器

    如果通常导致更改检测运行的事件 setTimeout setInterval 浏览器事件 ajax 调用等 来自特定类 服务或组件 有没有办法完全禁用 Angular 的更改检测器 也就是说 当我发现setInterval在我的服务中注册会
  • 在 Elastic Beanstalk 中运行 cron 作业

    因此 我在 Django Elastic Beanstalk 应用程序中有一个功能 其工作原理如下 下载文件 解析文件 使用文件中的数据运行对 API 的一些调用 使用新数据更新 EB 实例的数据库 在测试实例中 我刚刚设置了本地 cron
  • NSSegmentedControl 颜色

    我想要一个 NSSegmentedControl 的子类 其中各个段具有不同的颜色 我尝试对 NSSegmentedControl 进行子类化并添加以下代码 void drawRect NSRect dirtyRect NSColor co
  • 重新定义golang中的const进行测试

    我正在为服务编写一个 http 客户端 并且为了测试我想使用net http httptest服务器而不是调用远程 API 如果我做到了 我可以轻松做到这一点baseUrl一个全局变量 设置为我的测试服务器的 url 然而 这使得生产代码更
  • 在 Delphi 2009 中我需要释放变体数组吗?

    如果我有一个只包含简单类型的变体数组 以及可能的简单类型的进一步变体数组 我是否需要执行任何显式操作来释放内存 或者这一切都为我处理好了 我一直以为没什么可做的 但我只是有一点疑问 变体是托管类型 它们由编译器的引用计数系统拥有 不需要手动
  • ios 延迟位置更新无法延迟

    我正在考虑对 iOS 活动跟踪器使用延迟位置更新 它允许在后台提供位置服务 我已经实现了建议的代码片段 见下文 在 Xcode 调试中 延迟位置会尝试启动几次 直到位置数据以大约每秒 1 次的速度传入 之后 它声称启动延迟成功 并且在指定时
  • .NET foreach 语句是否保证按照集合的构建顺序迭代集合?

    一位同事在他编写的一些 C 代码中使用了 for 循环来迭代 List 并留下了评论 没有使用 For Each 因为我不确定它是否按顺序迭代 谁知道 Microsoft 会做什么 例如 假设我们有一个像这样构建的列表 var someLi
  • 如何让Java注册一个带有空格的字符串输入?

    这是我的代码 public static void main String args Scanner in new Scanner System in String question question in next if question
  • 数据建模:逻辑建模练习

    在尝试学习数据存储艺术的过程中 我一直在尝试获取尽可能多的可靠信息 PerformanceDBA 在以下帖子中发布了一些非常有用的教程 示例 我的数据标准化了吗 and 关系表命名约定 我已经问过这个模型的一个子集问题here 因此 为了确
  • yocto:如何安装命令 locale 和 localedef?

    如何在 yocto 项目中为我的图像安装命令 locale 和 localedef 我已尝试以下操作 IMAGE INSTALL append glibc locale 但这不起作用 我该怎么做 locale位于一个名为glibc util
  • 了解 PKCE 与授权代码授予的优势

    我是 OAuth 世界的新手 我试图了解使用 PKCE 相对于传统授权代码授予的好处 我的许多假设可能是错误的 所以感谢您的指正 我是一名移动应用程序开发人员 根据 OAuth 文档 客户端机密不能在公共客户端的应用程序代码中进行硬编码 避