【问题标题】:oAuth token in browser history浏览器历史记录中的 oAuth 令牌
【发布时间】:2020-08-27 23:20:57
【问题描述】:

我正在编写一个使用 oAuth 的本机应用程序。 (我的应用程序是客户端) 目前,我的应用是 Windows 原生的,但我认为这个问题在所有桌面操作系统中都是相同的。

为了适应 oauth 流程:我的原生应用会打开一个浏览器选项卡并将其定向到 oauth 提供程序。

我使用的是浏览器而不是嵌入式 web 视图,因为许多身份提供者(例如:google)会阻止非标准浏览器实现。 (他们想要阻止自动机器人)。

我的应用程序有一个小型网络服务器,用于侦听从身份提供者回调的 redirect_url。然后我的应用程序继续使用所述令牌从提供者访问 oauth 资源(例如:gmail)

问题是:当身份提供者(例如google)重定向回我的应用程序时,它会在浏览器的地址栏中将access_token返回给我的应用程序。因此,此令牌随后将出现在浏览器历史记录中,这将使其他本机应用程序(或稍后使用浏览器的随机用户)很容易窃取我的应用程序的令牌。

我能做些什么来缓解这种情况?

如何防止 oauth 回调中的 access_token 出现在我的浏览器历史记录中?

【问题讨论】:

  • 1/ 请记住,访问令牌仅在 60 分钟内有效,因此历史记录中的 bing 不应代表安全威胁。 2/ 正如 Gary 所说,有两种类型的应用程序。 Web 浏览器和其他一切(服务器、嵌入式、桌面等)您的应用属于后者。
  • @pinoyyid 进行令牌交换需要客户端密码。将 client_secret 存储在最终用户设备上是否不安全?没错,我不会从浏览器(或中间人)窃取我的令牌,但有人会从我的本地应用程序的二进制文件中窃取我的全局“client_secret”。 (从而窃取了属于我整个部署的秘密)。我认为只有当我有一个后端服务器来存储我的秘密时,非隐式流才有效

标签: oauth-2.0 google-oauth


【解决方案1】:

听起来您正在使用隐式流,这是主要问题:

  • 更新了授权代码流 (PKCE),以便只返回一次性使用授权代码。即使攻击者以某种方式窃取了它,它也已经被使用并且攻击会失败。

另一种选择是在登录后在浏览器中显示一个插页式页面,单击按钮返回您的应用。作为该点击的一部分,您可以清除浏览器选项卡的历史记录并移动到新位置:

history.replaceState({}, document.title, redirectLocation):

请参阅我的blog post,了解有关外观的更多详细信息。

【讨论】:

  • 我无法使用授权。我没有服务器。本机应用程序正在客户端计算机上运行。
猜你喜欢
  • 2015-06-14
  • 1970-01-01
  • 2017-08-17
  • 2011-11-14
  • 2013-05-21
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多