2012-07-15 106 views
6

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

我使用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(); 

probem是,它在accountinfo上引发异常。 (System.Net.HttpStatusCode.Unauthorized) 以前的一切正常,我得到登录(usertoken & usersecret)。

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

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

凡重定向到dropbox来登录... 我没有一个Web应用程序,所以我没有URL。 ..

我拥有的是一个控制台应用程序,它应该每晚自动将我的数据库备份为一项服务,对此它肯定非常糟糕,需要Web浏览器和用户输入电子邮件/用户名+密码。

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

如果我使用的示例应用程序,那么它的工作原理,但是这需要在网络上的用户名和密码打字,而且吸大的时间为一个控制台应用程序...

+0

你绑到主机的控制台应用程序UI控件? – Paparazzi 2012-07-15 19:40:51

+1

不,我试图将文件复制到DropBox,首先检查可用空间(控制台应用程序)。我绝对不想要UI控件,也不需要UI。 – 2012-07-15 19:41:57

回答

1

这是可能的,使用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 
); 
6

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

所以一般这是不可能实现这个没有webbrower。否则,你将不得不执行真正肮脏的黑客攻破dropbox的权限系统。

请在谷歌上查看“OAuth 2.0授权流程”。 这里有一个图,我发现在Yahoo这表明它是如何工作的:

The OAuth 2.0 flow

+0

如果这是真的,那么API是如此无用... – 2012-07-15 22:35:06

+0

正如我已经提到的,你可以尝试自己解析生成的HTML并提取文本框名称来模拟用户输入了它的凭据并将它们传递给API。请注意,你可能不得不绕过一些东西,如用于反[XSRF](http://de.wikipedia.org/wiki/Cross-Site_Request_Forgery)的登录ID;) – GameScripting 2012-07-16 08:00:30

+0

我soooo拧...尝试UbuntuOne - 它是API(如果它可以被称为)更糟。现在Google驱动器是我最后的希望。它也使用oAuth,所以 - 可能我仍然是如此。也许是时候写我自己的云存储提供商,我感觉到一个市场缺口 - 有许多云存储提供商,但没有一个有用的API ... – 2012-07-16 11:25:00

1

由于GameScripting解释Dropbox的API使用OAuth这就需要用户登录通过Dropbox的网站进行身份验证的访问令牌。

结帐在这里的文档:http://dkdevelopment.net/what-im-doing/dropnet/为3个步骤的过程。

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

也有看样品的Windows Phone应用程序,让您的这个过程是如何工作的想法:https://github.com/dkarzon/DropNet/blob/master/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs

+0

- >你在建什么样的应用程序? - >控制台应用程序,我说在这个问题中,在你写之前阅读它,请......在控制台应用程序中看过一个WebBrowser(Lynx不计数,我不想为C#编写控制台浏览器) )。 – 2012-07-17 11:40:28

+0

控制台应用程序是否仅在内部使用一个Dropbox帐户?如果是这样的话,我可能会建议你使用一个简单的页面像示例一样手动获取令牌,然后将令牌“硬编码”到应用程序中,而不是用户名和密码。 – dkarzon 2012-07-19 03:01:05

+0

是的,信息的缺失在于您需要将RequestToken交换为访问令牌。毕竟有意义 - 公钥/私钥加密密码,所以没有人可以对其进行反向工程。 – 2013-08-29 10:24:00

1

硬编码的用户名和密码,而不是,你可以硬编码OAuth访问令牌。

首先,创建一个简单的程序(使用相同的应用程序密钥),遵循标准的基于浏览器的授权流程。然后用它来授权所需用户的应用程序。这将为您提供与该用户和您的应用程序密钥关联的OAuth访问令牌(“令牌”和“令牌密钥”)。然后,在您的服务式应用程序中,只需硬编码OAuth访问令牌(使用DropNetClient的4参数构造函数)即可。

2

对于uisng的DropnetClient的4参数的构造函数也是我们需要建立基于Web网址,并允许用户进行身份验证他的账户,这是compusory的事情,的accessToken将产生之后,用户打允许在认证过程按钮

相关问题