在过去的 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?
谢谢