问题:
我从这里使用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和用户必须输入电子邮件/用户名+密码。
如何通过直接提供硬编码的用户名和密码来登录?
如果我使用示例应用程序,那么它可以正常工作,但这需要在网络上输入用户名和密码,这对于控制台应用程序来说太大了......
答案 0 :(得分:6)
据我所知,其他API(Facebook,谷歌,堆栈交换等),你必须将你的用户重定向到Dropbox的网页,在那里它将授予你使用它的帐户执行的权限。
所以一般来说,如果没有webbrower ,就无法实现这一目标。否则你将不得不执行非常脏的黑客攻击Dropbox的权限系统。
请在google上查看“OAuth 2.0授权流程”。 这是我在Yahoo找到的图表,其中显示了它的工作原理:
答案 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
);