DropNet DropBox登录,如何在控制台应用程序中以编程方式执行?

时间:2012-07-15 19:36:26

标签: c# .net dropbox dropbox-api dropnet

问题:

我从这里使用DropBox csharp API:
https://github.com/dkarzon/DropNet

来自单元测试,以及此处唯一的工作样本 https://github.com/dkarzon/DropNet/blob/master/DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs

我认为它的工作原理如下:

DropNet.DropNetClient client = new DropNet.DropNetClient(strApiKey, strAppSecret);

DropNet.Models.UserLogin login = client.GetToken();
client.UserLogin = login;

var accountInfo = client.AccountInfo();
str = accountInfo.quota_info.quota.ToString();

探测器是,它会在accountinfo上抛出异常。 (System.Net.HttpStatusCode.Unauthorized) 一切正常,我得到登录(usertoken& usersecret)。

我认为我的问题是示例应用程序的这一部分:

var url = _client.BuildAuthorizeUrl(Request.Url.ToString() + "?dropboxcallback=1");
Response.Redirect(url);

重定向到dropbox进行登录的位置... 我没有网络应用程序,所以我没有网址...

我所拥有的是一个控制台应用程序,它应该每天晚上自动备份我的数据库作为服务,对于它来说当然非常糟糕,需要webbrowser和用户必须输入电子邮件/用户名+密码。

如何通过直接提供硬编码的用户名和密码来登录?

如果我使用示例应用程序,那么它可以正常工作,但这需要在网络上输入用户名和密码,这对于控制台应用程序来说太大了......

5 个答案:

答案 0 :(得分:6)

据我所知,其他API(Facebook,谷歌,堆栈交换等),你必须将你的用户重定向到Dropbox的网页,在那里它将授予你使用它的帐户执行的权限。

所以一般来说,如果没有webbrower ,就无法实现这一目标。否则你将不得不执行非常脏的黑客攻击Dropbox的权限系统。

请在google上查看“OAuth 2.0授权流程”。 这是我在Yahoo找到的图表,其中显示了它的工作原理:

The OAuth 2.0 flow

答案 1 :(得分:2)

对于uisng DropnetClient的4参数构造函数,我们还需要构建基于web的url并允许用户验证他的帐户这是一个compusory的东西,在用户点击认证过程中的allow按钮后会生成accesstoken

答案 2 :(得分:1)

正如GameScripting所解释的,Dropbox API使用oauth,要求用户通过Dropbox网站登录来验证访问令牌。

在此处查看文档:{​​{3}},了解3个步骤。

您正在构建什么样的应用程序?正常过程是在应用程序内加载浏览器控件并使用它导航到登录URL。

另请查看示例Windows Phone应用,了解此过程的工作原理:http://dkdevelopment.net/what-im-doing/dropnet/

答案 3 :(得分:1)

您可以对OAuth访问令牌进行硬编码,而不是对用户名和密码进行硬编码。

首先,创建一个遵循标准的基于浏览器的授权流程的简单程序(使用相同的应用程序密钥)。然后使用它来为所需用户授权应用程序。这将为您提供与该用户和您的应用密钥相关联的OAuth访问令牌(“令牌”和“令牌密钥”)。

然后,在您的服务式应用程序中,只需对OAuth访问令牌进行硬编码(使用DropNetClient的4参数构造函数)。

答案 4 :(得分:0)

使用SharpBox测试是可行的 需要手动获取AccessToken作为一次性操作,然后可以省略登录页面并使用保存的AccessToken。

http://www.jayway.com/2012/02/06/unboxing-dropbox-and-sharpbox-2/

神奇的界限是:

Globals.DropBox.Token = AppLimit.CloudComputing.SharpBox.StorageProvider.DropBox.DropBoxStorageProviderTools
.ExchangeDropBoxRequestTokenIntoAccessToken(
      Globals.DropBox.config
    , Globals.DropBox.AppKey, Globals.DropBox.AppSec
    , Globals.DropBox.requestToken
);