【问题标题】:How to authenticate with Dropbox API from a desktop application?如何从桌面应用程序使用 Dropbox API 进行身份验证?
【发布时间】:2016-01-24 10:33:42
【问题描述】:

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

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

似乎还有另一种选择——只为身份验证部分运行全局服务器,然后重定向回在 localhost 上运行的服务器。但我真的不喜欢这个。

所以,我的问题是:
有没有更好的方法从用户的计算机上使用 Dropbox API 进行身份验证?
还是可以发布应用的secret

【问题讨论】:

  • 您将始终需要一个步骤来为 OAuth-2.0 初始授权应用程序 - 这可能位于全局服务器上,但一旦授权,桌面应用程序只需要为用户存储刷新令牌.绝不能公布秘密。

标签: oauth oauth-2.0 dropbox-api


【解决方案1】:

当然不希望公开自己的应用秘密,因此在 OAuth 2 中,包括 Dropbox 的实现,有一种机制可以在客户端应用中处理 OAuth 流而不使用应用秘密。

具体而言,客户端应用程序应使用“令牌”流(而不是“代码”流),如 here under /oauth2/authorize 所述:

OAuth 2.0 支持两种授权流程:

  • 代码流通过 redirect_uri 回调返回一个代码,然后应使用 /oauth2/token 调用将其转换为不记名令牌。这是在服务器上运行的应用的推荐流程。

  • 令牌或隐式授权流通过 redirect_uri 回调返回不记名令牌,而不是要求您的应用再次调用服务器。这对于纯客户端应用程序很有用,例如移动应用程序或基于 JavaScript 的应用程序。

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

【讨论】:

  • 关于如何为客户端 Python 应用程序实现令牌流的任何指针?我尝试启动本地 Web 服务器,但访问令牌在 URL 片段中返回,因此服务器和我的应用程序无法访问。
  • @Adam 看来你也在论坛发帖了,所以我会在那里跟进:dropboxforum.com/t5/API-Support-Feedback/…
【解决方案2】:

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

只是出于安全原因

【讨论】:

  • (不是反对者)这无济于事,因为重点是没有任何服务器。如果我有服务器,我可以将 secret 存储在那里。
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2017-03-03
相关资源
最近更新 更多