使用Dropnet获取Dropbox访问令牌

本文关键字:访问令牌 Dropbox 获取 Dropnet 使用 | 更新日期: 2023-09-27 18:21:30

我正在尝试在我的网站上实现文件上传到Dropbox。然而,在用户点击授权我的应用程序后,我很难获得accessToken。

以下是我获取URL的代码,它将返回给客户端,以便用Javascript打开一个新窗口。

[WebMethod]
public String setUpDropboxOA(String uri, Int32 form_id, String user_auth)
{
    var client = new DropNetClient("xxxxxxxxx", "xxxxxxxxx");
    return client.GetTokenAndBuildUrl(uri);
}

这是我的回调函数:

[WebMethod]
public void AuthorizeDropboxCallback(String oauth_token)
{
    var client = new DropNetClient("xxxxxxxxx", "xxxxxxxxx");
    var accessToken = client.GetAccessToken();
    var jsonObj = new { oauth_token = accessToken.Token, oauth_secret = accessToken.Secret };
    var JSONAuthorizationData = JsonConvert.SerializeObject(jsonObj);
    saveNotification(form_hash, "Dropbox", JSONAuthorizationData, user_id);
}

这是我在客户端上遇到的错误。GetAccessToken():

Exception of type 'DropNet.Exceptions.DropboxException' was thrown.

DropNet的文档说,GetAccessToken有一个重载,可以让你指定一个要使用的令牌,但我没有看到。我觉得这就是问题所在,但我不完全确定。

使用Dropnet获取Dropbox访问令牌

正如@albattran的回答所暗示的那样,这是因为您正在创建DropNetClient的两个不同实例。

client.GetTokenAndBuildUrl(uri);

这种方法实际上做了两件事。1,对Dropbox进行API调用以获取请求令牌,然后使用该请求令牌创建登录url。

要解决这个问题,您需要一种在web请求之间存储请求令牌的方法。

也许可以在使用会话时考虑以下内容。

var userToken = client.GetToken();
Session["user_token"] = userToken.Token;
Session["user_secret"] = userToken.Secret;

然后ok回调读取这些会话变量,并将它们添加到DropNetClient的构造函数重载中。

var token = Session["user_token"];
var secret = Session["user_secret"];
var client = new DropNetClient("XXXX", "XXXX", token, secret);
client.GetAccessToken();

我认为您的问题是由于在不同的请求之间丢失了DropNetClient的实例,您正在创建两个DropNetClient实例。

您需要持久化GetTokenAndBuildUrl的初始令牌形式,并在调用GetAccessToken时将其还原。

因为oAuth是3个步骤:

  1. 获取请求令牌
  2. 向用户发送授权,并返回验证器
  3. 使用原始请求令牌和验证器获取访问令牌