【发布时间】: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”。 (从而窃取了属于我整个部署的秘密)。我认为只有当我有一个后端服务器来存储我的秘密时,非隐式流才有效