我想将 Dropbox 用于我的文件共享应用程序,使用 Core Dropbox API。我正在使用 OAuth 2.0 API 进行身份验证(隐式授予方法)。问题是,为了获取访问令牌,我需要登录到 Dropbox 帐户,否则它会将我重定向到 Dropbox 登录页面。我不希望我的用户输入登录凭据。
有什么办法可以避免登录过程,直接获取访问令牌?或者,我可以在后端使用一些登录 api 进行登录,而无需用户迭代?
在这里,我正在考虑一个 Dropbox 帐户,其所有必要的凭据都在我身边。
谢谢。
我想将 Dropbox 用于我的文件共享应用程序,使用 Core Dropbox API。我正在使用 OAuth 2.0 API 进行身份验证(隐式授予方法)。问题是,为了获取访问令牌,我需要登录到 Dropbox 帐户,否则它会将我重定向到 Dropbox 登录页面。我不希望我的用户输入登录凭据。
有什么办法可以避免登录过程,直接获取访问令牌?或者,我可以在后端使用一些登录 api 进行登录,而无需用户迭代?
在这里,我正在考虑一个 Dropbox 帐户,其所有必要的凭据都在我身边。
谢谢。
是的,你可以这样做。
请执行下列操作:
转到https://www.dropbox.com/developers 单击“应用程序控制台”单击“创建应用程序”选择“Dropbox API 应用程序”选择“文件和数据存储”作为数据类型。用您自己的访问偏好回答其余问题
这是您需要的部分。设置应用程序后,在应用程序控制台中,单击该应用程序。在应用程序的主页上,在 OAUTH2 部分,有一个按钮显示“生成访问令牌”。
单击此按钮,它将生成一个未过期的访问令牌,您可以复制/粘贴并在您的应用程序中使用它来授予您访问权限,而无需进行 Oauth2 身份验证。
这是一个使用带有 curl 的访问令牌来列出文件夹中的文件(并获取其他元数据)的示例。
curl https://api.dropbox.com/1/metadata/dropbox/YourFolder -H "Authorization:Bearer XYZ123"
其中 XYZ123 是您从应用的应用控制台生成的访问令牌。
只要您在请求的标头中包含 Authorization: Bearer,您就可以使用Core API中的所有 API 调用,而无需提供应用 ID、机密或执行 oauth2 身份验证。
由于您想使用您的Dropbox 帐户来存储文件,因此没有理由通过登录来打扰其他/您的用户:只需access_token以常规方式为您的客户获取一个(这需要您登录到 Dropbox)将其存储在您的应用程序中并access_token在调用 Dropbox API 时使用它。根据Dropbox Access Token Expiry ,Dropbox 的访问令牌永不过期,所以这应该是您所需要的。
正如您可能在核心 api 文档中看到的那样,Dropbox 不提供此功能。
不过,您可以通过模拟用户与网站的交互来自动化该过程。这可以通过请求模块来完成。我为我的项目开发了一个解决方案:
https://github.com/joe42/CloudFusion/blob/master/cloudfusion/store/dropbox/dropbox_store.py#L214
也许这可以使用 PhantomJS 之类的解决方案更轻松地完成,尽管当时我并不知道。
在这里为我自己的问题提出可能的解决方案:这里的主要问题是每隔一段时间重新生成访问令牌,这也是没有任何用户交互的后端东西。在浏览了 Dropbox API 之后,我得出的结论是没有公开 API 来自动重新生成访问令牌。但是Google Drive确实提供了不需要用户交互的Service Account 。