如何通过桌面应用使用 Dropbox API 进行身份验证



我正在尝试开发一个将在用户计算机上本地运行的应用程序。我想使用 Dropbox API 来存储和同步一些特定于应用的文件。

在整个 Dropbox 文档中,到处都假定该应用程序是 Web 应用程序。看起来进行身份验证的唯一选项是通过 OAuth。如果应用程序在我自己的服务器上运行,那么存储应用程序的密码(这是 OAuth 所必需的,如示例中所示)不是问题。但就我而言,如果我在用户计算机上运行实现 OAuth 的 Web 服务器,我将不得不发布密钥

似乎还有另一种选择 – 仅为身份验证部分运行全局服务器,然后重定向回在本地主机上运行的服务器。但我真的很不喜欢这样。

所以,我的问题是:
有没有更好的方法可以从用户的电脑使用 Dropbox API 进行身份验证?
或者是否可以发布应用程序的机密

发布应用程序密钥当然是不可取的,因此在 OAuth 2(包括 Dropbox 的实现)中,有一种机制可以在不使用应用程序密钥的情况下在客户端应用程序中处理 OAuth 流。

具体而言,客户端应用应使用"令牌"流(而不是"代码"流),如/oauth2/authorize 中所述:

OAuth 2.0 支持两种授权流:

  • 代码流通过 redirect_uri 回调返回代码,然后应使用/oauth2/token 调用将其转换为持有者令牌。这是在服务器上运行的应用的建议流。

  • 令牌
  • 或隐式授权流通过redirect_uri回调返回持有者令牌,而不是要求应用对服务器进行第二次调用。这对于纯客户端应用(如移动应用或基于 JavaScript 的应用)非常有用。

不幸的是,对于客户端 Python 应用而言,Dropbox Python SDK 中的 OAuth 流程目前仅针对服务器端应用构建,因此仅实现代码流,而不是令牌流。不过它是开源的,因此您可以根据需要对其进行修改,或单独实现令牌流。

作为一种更简单的解决方案,您可以发布编码secret并在服务器端对其进行解码。

这只是出于安全原因

最新更新