C# 协助Oauth2身份验证以与DropBox一起使用

C# 协助Oauth2身份验证以与DropBox一起使用,c#,oauth-2.0,dropbox,C#,Oauth 2.0,Dropbox,我正在构建一个需要将文件上传到DropBox的Windows c#应用程序。基本上,我拥有我的应用程序所需的一切(应用程序机密和应用程序密钥),但我需要将客户端令牌保存到我的sql DB中以备将来使用。根据Dropbox,我无法保存用户登录信息,这很好,但找到一个好的库变得很困难。我尝试了许多不同的基于Dropbox的库,但遇到以下问题: SharpBox:似乎很容易使用,但需要某种反序列化器将客户机密钥和客户机机密保存到任何地方 OAuth2授权人:我找不到足够的文档,以便我实际实现它 Dro

我正在构建一个需要将文件上传到DropBox的Windows c#应用程序。基本上,我拥有我的应用程序所需的一切(应用程序机密和应用程序密钥),但我需要将客户端令牌保存到我的sql DB中以备将来使用。根据Dropbox,我无法保存用户登录信息,这很好,但找到一个好的库变得很困难。我尝试了许多不同的基于Dropbox的库,但遇到以下问题:

SharpBox:似乎很容易使用,但需要某种反序列化器将客户机密钥和客户机机密保存到任何地方

OAuth2授权人:我找不到足够的文档,以便我实际实现它

DropNet:这是一个看起来很有希望的项目。它是异步的,看起来不错,但我还是找不到一个如何执行auth函数并将变量保存到文件/DB/Reg/或任何东西的示例

API:这是我目前使用的方法,它正在工作。问题是它不是异步的,需要.NET4.5。我对所有的问题都很满意,但最近发现不同版本的JSON和其他库非常敏感

我希望有人能给我一些帮助,让上面任何一个OAUTH libs都能正常工作,让3条腿的auth进程正常工作

更新::

好的,我将包括我目前正在使用的一些代码,它使用dropbox.api:

// Get Oauth Token
    private static OAuthToken GetAccessToken()
    {
        string consumerKey = "mykey";
        string consumerSecret = "myseceret";
        var oauth = new OAuth();
        var requestToken = oauth.GetRequestToken(new Uri(DropboxRestApi.BaseUri), consumerKey, consumerSecret);
        var authorizeUri = oauth.GetAuthorizeUri(new Uri(DropboxRestApi.AuthorizeBaseUri), requestToken);
        Process.Start(authorizeUri.AbsoluteUri);
        MessageBox.Show("Once Registration is completed Click OK", "Confirmation");
        return oauth.GetAccessToken(new Uri(DropboxRestApi.BaseUri), consumerKey, consumerSecret, requestToken);
    }

        // Complete Oauth function and write to file
    private void button5_Click(object sender, EventArgs e)
    {
        DialogResult result1 = MessageBox.Show("Please register for dropbox before continuing with authentication. The authorization process will take 1 minute to complete. During that time the backup utility window will be unresponsive. Click yes if you are ready to begin the authorization. HAVE YOU REGISTERED FOR DROPBOX YET?", "DO YOU HAVE A DROPBOX ACCOUNT?", MessageBoxButtons.YesNo);
        if (result1 == DialogResult.Yes)
        {
            try
            {
                u_w.Enabled = false;
                var accesstoken = GetAccessToken();
                StringBuilder newFile = new StringBuilder();
                string temptoken = "";
                string tempsecret = "";
                string tempprovider = "";
                string tempstatus = "";
                string[] file = System.IO.File.ReadAllLines(@"C:\cfg\andro_backup.ini");
                foreach (string line in file)
                {
                    if (line.Contains("dbkey:"))
                    {
                        temptoken = line.Replace("dbkey:", "dbkey:" + accesstoken.Token);
                        newFile.Append(temptoken + "\r\n");
                        continue;
                    }
                    if (line.Contains("dbsecret:"))
                    {
                        tempsecret = line.Replace("dbsecret:", "dbsecret:" + accesstoken.Secret);
                        newFile.Append(tempsecret + "\r\n");
                        continue;
                    }
                    if (line.Contains("Provider:"))
                    {
                        tempprovider = line.Replace("Provider:", "Provider:DropBox");
                        newFile.Append(tempprovider + "\r\n");
                        continue;
                    }
                    if (line.Contains("Status:"))
                    {
                        tempstatus = line.Replace("Status:", "Status:Connected");
                        newFile.Append(tempstatus + "\r\n");
                        continue;
                    }
                    newFile.Append(line + "\r\n");
                }
                System.IO.File.WriteAllText(@"C:\cfg\andro_backup.ini", newFile.ToString());
                MessageBox.Show("Completed Backup Provider Setup", "Provider Setup Complete");
                Configuration.Reload();
以上工作目前,我可以上传,下载文件。问题是它不是异步的,我想尝试留在.NET4.0中。如果可能的话,这段代码需要4.5

试图用dropnet做同样的事情,我根本无法让它工作,即使使用他在这里的页面上给出的例子。
我试图看看他在那里的演示,但他们解释说,让用户每次登录执行任何功能,我需要授权的应用程序,以便它可以做它的行动时,它需要。至于我在drop net中使用的代码,我实际上只是复制并粘贴了他在那里的代码,只是想看看我是否能让它连接起来,但仍然无法使用。

如果您使用的drop net与示例类似,那么您需要做的就是从
GetAccessToken
方法保存返回对象。它返回一个UserLogin对象的实例,该对象上有令牌和密码。或者,如果您正在为其使用异步方法,则返回callback参数

在此处签出示例:


张贴你正在使用的代码,这样我可以给你一个更好的解释

你能用DropNet发布你的代码吗?看起来使用保存的访问令牌非常简单,但是如果不看一下您的尝试,很难说出您缺少了什么。实际上,这很有帮助,我再次查看了文档,最后将它们拼凑在一起。非常感谢。