具有桌面应用程序安全性的 OAuth2

Nig*_*hen 6 security desktop oauth-2.0 google-drive-api electron

我有一个 Electron 应用程序,它基本上是一个 Google Drive 客户端。我打算使用 OAuth 2。

但是,Google API 要求我在生成 client_secret 的地方注册我的应用程序。由于这是一个桌面应用程序,我将 client_secret 存储在服务器中。身份验证 URL 在服务器中生成并发送给用户。

我担心人们可以冒充应用程序并代表我的 client_secret 做事。如果有恶意的人创建了一个未经授权的应用程序并向我的服务器发送请求,理论上他们可以代表我的应用程序做恶意的事情。

我能做些什么来缓解这个问题,或者这不是问题吗?

编辑:人们只能访问自己的文件。就像他们在 drive.google.com 上一样(读/写/删除文件)

sta*_*t54 5

编辑: 除非您控制它的安装位置,否则验证请求是否来自您的桌面应用程序而不是将其克隆到您的服务器实际上是不可能的,但对于用户程序,您没有。你可以设置一些微薄的障碍,但你不能提供任何保证。看起来 iOS/Android 正在这方面发展,我想唯一可行的实现是让操作系统代表您发送经过验证的凭据,即操作系统级别的支持,而不是应用程序级别的支持。

至于一般的 OAuth 2.0 认证方法...

如果我们在这里走一遍,我们可以分析每种授权方式,看看这样做的风险。https://developers.google.com/identity/protocols/OAuth2

  1. https://developers.google.com/identity/protocols/OAuth2WebServer(我认为你在这个阵营中,但这里没有client_secret
    • 只有针对您的客户端凭据的 DOS 风险。响应只会被确认并转发到指定的重定向 Uri,因此可以代表您对令牌发出请求,但只有您的服务器才会收到令牌(假设用户代理是体面的),您应该处理以下情况您收到未知的令牌响应。
  2. https://developers.google.com/identity/protocols/OAuth2InstalledApp

    • 用户安装恶意应用程序的风险。当您丢失client_id,client_secretredirectUri(您无法将这些保密以防止设备调试),那么任何人都可以代表您制作应用程序。对于移动应用程序来说,这是一个不幸的问题。目前唯一的防御是用户同意屏幕,也就是说,希望用户通过查看同意屏幕注意到他们已被骗从商店安装恶意应用程序而不是您的合法应用程序。

      我很想在这方面看到更多的工作,也许 App Stores 可以代表您持有一些凭据,然后确认这是您的应用程序请求,我想这将涉及一些哈希检查等。

      我会更高兴在这个问题上得到纠正,但我认为没有什么可以阻止上述问题:P

  3. https://developers.google.com/identity/protocols/OAuth2UserAgent
    • 与 1 相同。
  4. https://developers.google.com/identity/protocols/OAuth2ForDevices
    • 与 2 相同。