Oauth 如何从桌面应用程序使用Dropbox API进行身份验证?

Oauth 如何从桌面应用程序使用Dropbox API进行身份验证?,oauth,oauth-2.0,dropbox-api,Oauth,Oauth 2.0,Dropbox Api,我正在尝试开发一个将在用户计算机上本地运行的应用程序。我想使用Dropbox API来存储和同步一些特定于应用程序的文件 在整个Dropbox文档中,都假定应用程序是web应用程序。看起来唯一的认证选项是通过OAuth。如果应用程序在我自己的服务器上运行,那么存储应用程序的密码就没有问题(OAuth需要这个密码,如中所示)。但是在我的例子中,如果我在用户的计算机上运行一个实现OAuth的web服务器,我将不得不发布这个秘密 似乎还有另一种选择——只为身份验证部分运行全局服务器,然后重定向回本地主

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

在整个Dropbox文档中,都假定应用程序是web应用程序。看起来唯一的认证选项是通过OAuth。如果应用程序在我自己的服务器上运行,那么存储应用程序的密码就没有问题(OAuth需要这个密码,如中所示)。但是在我的例子中,如果我在用户的计算机上运行一个实现OAuth的web服务器,我将不得不发布这个秘密

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

所以,我的问题是:
有没有更好的方法从用户的计算机通过Dropbox API进行身份验证?

或者可以发布应用程序的机密吗?

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

具体而言,客户端应用程序应使用“令牌”流(与“代码”流相反),如文件所述:

OAuth 2.0支持两种授权流:

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

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


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

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


这只是出于安全原因

您始终需要一个步骤来初始授权OAuth-2.0应用程序-它可能位于全局服务器上,但一旦授权,桌面应用程序只需要为用户存储刷新令牌。这个秘密永远不应该被公布。(不是下行投票者)这不会有帮助,因为关键是没有任何服务器。如果我有一个服务器,我可以把秘密存储在那里。有没有关于如何为客户端Python应用程序实现令牌流的指针?我尝试启动本地web服务器,但访问令牌在URL片段中返回,因此服务器和我的应用程序无法访问它。@Adam看起来你也在论坛上发布了,因此我将继续关注: