0

在过去的 4 个小时里,我一直在努力让它发挥作用,但没有任何效果。我一直在寻找高低的例子,但我尝试的一切都失败了。

这不是我第一次实现 oAuth(我已经为 Google Drive 和 Dropbox 成功实现了它),但我无法获得用于 Twitter API 的访问令牌。

我可以成功请求获取请求令牌(和秘密)并将用户重定向到 Twitter 网站。一旦用户授权了我的应用程序,我的回调 url 就会被点击,我会检索验证器。

现在我应该发送验证者并将其交换为访问令牌(和秘密)。

但是,我这样做的请求总是返回 401 Unauthorized 错误。我已经尝试了很多东西,我不知道还能尝试什么。请求的代码如下:

    Uri uri = new Uri("https://api.twitter.com/oauth/access_token");

    OAuth.OAuthBase oAuth = new OAuth.OAuthBase();
    String nonce = oAuth.GenerateNonce();
    String timestamp = oAuth.GenerateTimeStamp();
    String parameters = "";
    String normalizedUrl = "";
    String signature = oAuth.GenerateSignature(uri, _consumerKey, _ConsumerSecret, requestToken, requestTokenSecret, "POST", timestamp, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normalizedUrl, out parameters);

    StringBuilder authHeader = new StringBuilder();
    authHeader.AppendFormat("oauth_token=\"{0}\", ", requestToken);
    authHeader.AppendFormat("oauth_consumer_key=\"{0}\", ", _consumerKey);
    authHeader.AppendFormat("oauth_nonce=\"{0}\", ", nonce);
    authHeader.AppendFormat("oauth_timestamp=\"{0}\", ", timestamp);
    authHeader.AppendFormat("oauth_signature_method=\"{0}\", ", "HMAC-SHA1");
    authHeader.AppendFormat("oauth_version=\"{0}\", ", "1.0");
    authHeader.AppendFormat("oauth_signature=\"{0}\"", Uri.EscapeDataString(signature));

    ServicePointManager.Expect100Continue = false;

    WebRequest request = HttpWebRequest.Create(uri);
    request.Method = WebRequestMethods.Http.Post;
    request.ContentType = "application/x-www-form-urlencoded";
    request.Headers.Add("Authorization", "OAuth " + authHeader.ToString());

    using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
    {
        sw.WriteLine("oauth_verifier=" + verifier);
    }

    WebResponse response = request.GetResponse();

requestToken 和 requestTokenSecret 是我在第一次请求后收到的令牌。

生成签名的 oAuth 助手类工作正常,我已经成功使用了一段时间。

这个请求有什么问题,它总是给我一个 401?

谢谢

4

1 回答 1

0

好吧,尽管我很想知道为什么这不起作用,但我最终使用了 Tweetsharp,并在几分钟内完成了工作。

于 2012-11-08T09:35:33.500 回答