2016-01-24 84 views
-1

我正在尝试开发将在用户计算机上本地运行的应用程序。我想使用Dropbox API来存储和同步一些特定于应用程序的文件。如何使用Dropbox API从桌面应用程序进行身份验证?

整个Dropbox文档中的任何地方都假定应用程序是一个Web应用程序。它看起来像通过OAuth进行身份验证的唯一选项。如果应用程序在我自己的服务器上运行,那么存储应用程序的秘密代码(OAuth所需的代码,如the example中所见)不成问题。但就我而言,如果我运行在用户计算机上实现OAuth的Web服务器,我将不得不发布秘密

似乎还有另一个选项–只为认证部分运行全局服务器,然后重定向回到在本地主机上运行的服务器。但我真的不喜欢这个。

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

+0

你总是需要一个步骤,最初授权使用OAuth的2.0的应用程序 - 这可能是一个全球性的服务器上,但一旦授权,桌面应用程序只需要存储的茶点令牌为用户。绝不应该公开这个秘密。 – pticawr

回答

2

发布应用程序秘密当然是不可取的,所以在OAuth 2中,包括Dropbox的实现,有一种机制可以在客户端应用程序中处理OAuth流而不使用应用程序秘密。

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

的OAuth 2.0支持两种授权流量:

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

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

不幸的是,客户端的Python应用程序的情况下,在Dropbox的的Python SDK中的OAuth的流程目前仅在考虑服务器端应用程序构建,因此仅实现码流,而不是令牌流。它是开源的,所以你可以根据需要修改它,或者单独实现令牌流。

-1

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

这只是出于安全原因

+0

(不是downvoter)这不会帮助,因为整个问题是没有任何服务器。如果我有一台服务器,我可以在那里存储*秘密*。 –

相关问题