具有桌面应用程序安全性的 OAuth2
OAuth2 with Desktop Application Security
我有一个 Electron 应用程序,它基本上是一个 Google Drive 客户端。我打算使用 OAuth 2。
但是,Google API 要求我在生成 client_secret 的地方注册我的应用程序。由于这是一个桌面应用程序,我将 client_secret 存储在服务器中。身份验证 URL 在服务器中生成并发送给用户。
我担心人们会冒充该应用程序并代表我的 client_secret 做事。如果有恶意的人创建了未经授权的应用程序并向我的服务器发送请求,理论上他们可以代表我的应用程序进行恶意操作。
我能做些什么来缓解这个问题吗?或者这不是问题吗?
编辑:人们只能访问自己的文件。就像他们在 drive.google.com(read/write/delete 个文件)
上一样
编辑: 验证请求来自您的桌面应用程序而不是它到您服务器的克隆是不可能的除非您可以控制它的安装位置,但对于用户程序则不能。你可以设置一些微薄的障碍,但你不能提供任何保证。看起来 iOS/Android 正在朝这方面前进,我想唯一可行的实现是 OS 代表您发送经过验证的凭证,即 OS 级别支持,而不是应用程序水平支持。
至于一般的 OAuth 2.0 身份验证方法...
走走过场,我们可以分析一下每一种授权方式,看看这样做的风险。 https://developers.google.com/identity/protocols/OAuth2
- https://developers.google.com/identity/protocols/OAuth2WebServer(我想你在这个营地,但这里没有
client_secret
)
- 只有 DOS 对您的客户端凭据的风险。 响应只会被确认并转发到指定的重定向 Uri,因此可以在您的代表令牌,但只有您的服务器会收到令牌(假设用户代理是体面的),您应该处理收到未知令牌响应的情况。
https://developers.google.com/identity/protocols/OAuth2InstalledApp
用户安装恶意应用程序的风险。 当您丢失 client_id
、client_secret
和 redirectUri
(你没有办法将这些保密以防止设备调试),那么任何人都可以代表你制作应用程序。对于移动应用程序来说,这是一个不幸的问题。目前唯一的防御措施是用户同意屏幕,也就是说,希望用户通过查看同意屏幕注意到他们已被欺骗从商店安装恶意应用程序而不是您的合法应用程序。
我希望看到这方面的更多工作,也许 App Store 可以代表您持有一些凭据,然后确认这是您的应用请求,我想这将涉及一些哈希检查等。
我更乐意在这个问题上得到纠正,但我看不出有什么可以阻止上述问题的:P
- https://developers.google.com/identity/protocols/OAuth2UserAgent
- 同1.
- https://developers.google.com/identity/protocols/OAuth2ForDevices
- 同2.
我个人会创建一个模仿 Google Drive REST API 的代理服务,但会实现您自己的 AAA 机制。这样所有的秘密都在服务器上得到保护,您可以添加细粒度的访问控制。
我有一个 Electron 应用程序,它基本上是一个 Google Drive 客户端。我打算使用 OAuth 2。
但是,Google API 要求我在生成 client_secret 的地方注册我的应用程序。由于这是一个桌面应用程序,我将 client_secret 存储在服务器中。身份验证 URL 在服务器中生成并发送给用户。
我担心人们会冒充该应用程序并代表我的 client_secret 做事。如果有恶意的人创建了未经授权的应用程序并向我的服务器发送请求,理论上他们可以代表我的应用程序进行恶意操作。
我能做些什么来缓解这个问题吗?或者这不是问题吗?
编辑:人们只能访问自己的文件。就像他们在 drive.google.com(read/write/delete 个文件)
上一样编辑: 验证请求来自您的桌面应用程序而不是它到您服务器的克隆是不可能的除非您可以控制它的安装位置,但对于用户程序则不能。你可以设置一些微薄的障碍,但你不能提供任何保证。看起来 iOS/Android 正在朝这方面前进,我想唯一可行的实现是 OS 代表您发送经过验证的凭证,即 OS 级别支持,而不是应用程序水平支持。
至于一般的 OAuth 2.0 身份验证方法...
走走过场,我们可以分析一下每一种授权方式,看看这样做的风险。 https://developers.google.com/identity/protocols/OAuth2
- https://developers.google.com/identity/protocols/OAuth2WebServer(我想你在这个营地,但这里没有
client_secret
)- 只有 DOS 对您的客户端凭据的风险。 响应只会被确认并转发到指定的重定向 Uri,因此可以在您的代表令牌,但只有您的服务器会收到令牌(假设用户代理是体面的),您应该处理收到未知令牌响应的情况。
https://developers.google.com/identity/protocols/OAuth2InstalledApp
用户安装恶意应用程序的风险。 当您丢失
client_id
、client_secret
和redirectUri
(你没有办法将这些保密以防止设备调试),那么任何人都可以代表你制作应用程序。对于移动应用程序来说,这是一个不幸的问题。目前唯一的防御措施是用户同意屏幕,也就是说,希望用户通过查看同意屏幕注意到他们已被欺骗从商店安装恶意应用程序而不是您的合法应用程序。我希望看到这方面的更多工作,也许 App Store 可以代表您持有一些凭据,然后确认这是您的应用请求,我想这将涉及一些哈希检查等。
我更乐意在这个问题上得到纠正,但我看不出有什么可以阻止上述问题的:P
- https://developers.google.com/identity/protocols/OAuth2UserAgent
- 同1.
- https://developers.google.com/identity/protocols/OAuth2ForDevices
- 同2.
我个人会创建一个模仿 Google Drive REST API 的代理服务,但会实现您自己的 AAA 机制。这样所有的秘密都在服务器上得到保护,您可以添加细粒度的访问控制。