与box.com交换access_token的refresh_token时出错请求400

时间:2014-02-19 09:55:12

标签: oauth-2.0 access-token

我过去已经成功地为其他服务做过这个,但是对于box.com我收到了一个错误,我已经尝试了所有我能想到的东西以及其他人在这里提出的建议。

我正在使用.NET C#;

string postdata = "";
postdata += "client_id=" + HttpUtility.UrlEncode(client_id) + "&";
postdata += "client_secret=" + HttpUtility.UrlEncode(client_secret) + "&";
postdata += "refresh_token=" + HttpUtility.UrlEncode(refreshToken) + "&";
postdata += "redirect_uri=" + HttpUtility.UrlEncode(_redirectUri) + "&";
postdata += "grant_type=refresh_token";

var json = PostResponse(new Uri(@"https://www.box.com/api/oauth2/token"), postdata);

我已尝试使用和不使用urlencoding值。通常我的经验不需要urlencoding。 我也尝试了不同的参数顺序。

private string PostResponse(Uri uri, string postdata)
{
    var bytes = Encoding.UTF8.GetBytes(postdata);

    var request = (HttpWebRequest)WebRequest.Create(uri);
    request.Method = WebRequestMethods.Http.Post;
    request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
    request.ContentLength = bytes.Length;

    Stream OutputStream = request.GetRequestStream();
    OutputStream.Write(bytes, 0, bytes.Length);

    var response = request.GetResponse();
    var reader = new StreamReader(response.GetResponseStream());
    return reader.ReadToEnd();
}

此代码失败,错误400(错误请求)。类似的代码适用于Google云端硬盘。

有人能发现我对box.com的错误吗?谢谢!

1 个答案:

答案 0 :(得分:1)

使用box_device_id和box_device_name(间接是我的问题的一部分)并使用详细信息检查响应,显示返回了一条json错误消息,指出刷新令牌已过期。事实证明Box在使用它们时会过期刷新令牌,并发出一个新令牌。这与我集成的其他云驱动器不同。