OAuth 2.0 中的客户端密钥

2024-04-07

要使用 google Drive api,我必须使用 OAuth2.0 进行身份验证。我对此有一些疑问。

  1. 客户端 ID 和客户端密钥用于识别我的应用程序是什么。但如果是客户端应用程序,则必须对它们进行硬编码。所以,每个人都可以反编译我的应用程序并从源代码中提取它们。这是否意味着一个坏应用程序可以通过使用好应用程序的客户端 ID 和密钥来冒充好应用程序?因此,用户会显示一个屏幕,要求向一个好的应用程序授予权限,即使它实际上是由一个坏的应用程序请求的?如果是,我该怎么办?或者实际上我不应该担心这个?

  2. 在移动应用程序中,我们可以将网络视图嵌入到我们的应用程序中。而且在webview中提取密码字段很容易,因为请求权限的应用程序实际上是一个“浏览器”。那么,移动应用程序中的 OAuth 没有客户端应用程序无法访问服务提供商的用户凭据的好处吗?


我和问题1有同样的问题,最近自己做了一些研究,我的结论是,不保守“客户秘密”是可以的。 在 OAuth2 规范中,不保守客户端机密的客户端类型称为“公共客户端”。 以下事实可以防止有人恶意获取授权代码和访问令牌的可能性。

1. 客户端需要直接从用户处获取授权码,而不是从服务处获取

即使用户表明他/她信任客户端的服务,客户端也无法仅通过显示客户端 ID 和客户端密钥从服务获取授权代码。 相反,客户端必须直接从用户那里获取授权码。 (这通常是通过 URL 重定向来完成的,我将在稍后讨论。) 因此,对于恶意客户端来说,仅仅知道用户信任的客户端 ID/秘密是不够的。它必须以某种方式涉及或欺骗用户来为其提供授权代码, 这应该比仅仅知道客户端 ID/秘密更难。

2. 使用客户端 ID/秘密注册重定向 URL

我们假设恶意客户端以某种方式设法让用户参与并让她/他单击服务页面上的“授权此应用程序”按钮。 这将触发从服务到用户浏览器的 URL 重定向响应以及授权代码。 然后授权代码将从用户的浏览器发送到重定向 URL,并且客户端应该监听重定向 URL 以接收授权代码。 (重定向 URL 也可以是 localhost,我认为这是“公共客户端”接收授权代码的典型方式。) 由于此重定向 URL 是使用客户端 ID/秘密在服务中注册的,因此恶意客户端无法控制向何处提供授权代码。 这意味着拥有您的客户端 ID/秘密的恶意客户端在获取用户的授权码方面存在另一个障碍。

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

OAuth 2.0 中的客户端密钥 的相关文章

随机推荐

  • Array.prototype.sort() 时间复杂度是多少?

    根据 Mozilla 文档 无法保证排序的时间复杂度和空间复杂度 取决于实施 至少可以安全地假设它不是O n 2 有没有关于它如何实施的更详细的数据 谢谢 火狐使用归并排序 https medium com nandodrw merge s
  • Magento Mage::getUrl 带后缀

    当 url 具有 html 后缀时 在 magento 中处理生成 url 的正确方法是什么 例如 获取以下产品 url 类别 产品 html 你不能简单地做Mage getUrl mycategory myproduct html or
  • 通过填充 UIImageView 图层边框宽度的颜色来动画进度

    我有 UIImageView 我把它做成了带有宽度层的圆形 如下图所示 用户可以更新图像并上传新图像 上传图像时我有一个进度回调 我想要的是在上传图像时用颜色对边框进行动画处理 例如 当用户单击上传时 边框从顶部开始为绿色 并根据进度填充宽
  • 自定义函数缺少参数 2

    因此 我尝试在保存更改后将原始的 post title 替换为同一篇文章右侧的自定义字段 但是 我在帖子页面上收到以下错误 警告 第 113 行 PATH public html wp content themes THEME functi
  • Chocolatey的正确使用(包更新/版本管理)

    注意 这个问题对于 Chocolatey 0 9 8 及以下版本有效 后来的版本从PowerShell脚本完全重写为C 应用程序 并且包管理的整个过程得到了很大的改进 我一直在使用巧克力味一段时间了 一开始我很兴奋 但过了一段时间我不确定它
  • 收到无效的 JSON 负载。未知名称 click_action

    所以我目前正在开发一个 PWA 我现在正在与推送通知我已经能够使用以下非常简单的 JSON 结构接收后台和前台通知 message token aValidToken notification title New Content body
  • 拦截MEF中的依赖关系

    是否可以在 MEF 处理依赖项请求之前拦截 MEF 中的依赖项请求 这对于实现装饰器和高级生命周期管理非常有用 就像是 catalogue AddInterceptor
  • 如何区分“消息”更新和“回调查询”更新? (电报机器人 API)

    抱歉 如果我的问题太混乱了 我是新来的 所以欢迎任何建议 如何区分 消息 更新和 回调查询 更新 我已经成功制作了一个内联键盘 但是当我使用它时 机器人只是挂起 他没有回复任何内容 我做了一些研究发现这个问题 https stackover
  • 错误:解析 XML 时出错:格式不正确(令牌无效)...?

    我正在开发一个具有以下 XML 的应用程序 但是当我尝试清理 构建我的项目时 会发生以下错误 错误 解析 XML 时出错 格式不正确 令牌无效
  • 检测控制台应用程序中的按键?

    我需要在控制台应用程序中检测按键 而不提示用户 基本上 我的应用程序通常是一个监听特殊输入设备的守护进程 但我需要在交互模式下使用键盘在开发盒上模拟它 我怎样才能做到这一点 我在 Linux 系统上 如果您在等待输入时无法阻塞 那么您可以使
  • 如何识别 Openoffice Calc 中两列中的重复值

    我有两列 其中有数字 当另一个人有重复的数字时 另一个人只拥有一次该数字 这些列中的数字不匹配 我需要找到 B 列中与 A 列中匹配的所有数字 这可能更好地解释了它 A B 1 2 2 2 4 5 6 5 7 6 8 6 我想得到这样的结果
  • 防止对 Web 应用程序的字典攻击

    防止字典攻击的最佳方法是什么 我已经想到了几种实现方式 但它们似乎都存在一些缺陷 X 次登录尝试失败后锁定用户 问题 很容易变成拒绝服务攻击 在短时间内锁定许多用户 逐渐增加用户名每次登录尝试失败的响应时间 问题 字典攻击可能使用相同的密码
  • 如何从指令获取角度视图层次结构?

    角度版本 6 我正在研究一个可以放置在任何元素上的指令 以用于一般使用日志记录 对于上下文 它看起来类似于以下内容 Directive selector log export class LogDirective Input log str
  • 替换 Woocommerce 3.4 中的 woocommerce_add_order_item_meta 挂钩

    我有自定义代码使用 woocommerce add order item meta 挂钩 但 woocommerce 3 4 0 显示错误日志 自版本 3 0 0 起 woocommerce add order item meta 已弃用
  • StoreKit 的 SKStoreProductViewController 在导航栏和视图之间留有空间?

    我有 UIViewController 的子类 它显示SKStoreProductViewController 该视图控制器最初是为 iOS 5 创建的 不使用自动布局 我的问题是 当SKStoreProductViewController
  • Phonegap:在 Android 中调整键盘显示上的 webview 大小

    我有一个类似的模态 有固定定位 Facebook 在最新的 Android 版本中对 Messenger 中的 feed chat 中的评论有何评论 我想要的看起来类似于 因此 当您专注于输入时 键盘会打开并缩小网络视图 默认情况下它不起作
  • 如何检查 YouTube 上是否存在某个频道?

    如果我做一个curl请求此网址 https www googleapis com youtube v3 channels part snippet 2CcontentDetails 2Cstatistics id UC x5XG1OVP6u
  • 将唯一 ID 实现为 UUID 并将其保存在 Keychain 中

    我的应用程序中需要唯一 ID 我知道 我们不能再使用 UDID 因此根据我的研究 使用 UUID 作为设备唯一 ID 并将其保存在钥匙串中将确保即使用户重新安装我的应用程序 唯一 ID 仍保持不变 我从 stackoverflow 上类似问
  • Perl 正则表达式中缺少最后一个字符

    记录小狗 记录需求 log s log 它的工作原理是在末尾 s 处缺少字符 如下所示 狗 需要 log s log 你不需要否定
  • OAuth 2.0 中的客户端密钥

    要使用 google Drive api 我必须使用 OAuth2 0 进行身份验证 我对此有一些疑问 客户端 ID 和客户端密钥用于识别我的应用程序是什么 但如果是客户端应用程序 则必须对它们进行硬编码 所以 每个人都可以反编译我的应用程