c# Twitter请求OAuth令牌

本文关键字:令牌 OAuth 请求 Twitter | 更新日期: 2023-09-27 18:05:13

我正在尝试根据我的消费者密钥和消费者密钥从Twitter API请求令牌。然而,我得到了一个The remote server returned an error: (403) Forbidden,我不知道为什么?

这是我到目前为止的尝试

//Get Request Token
string oauth_consumer_key = "<consumer key>";
string oauth_consumer_secret = "<consumer secret>";
Uri requestToken = new Uri("https://api.twitter.com/oauth2/token?oauth_consumer_key=" + oauth_consumer_key + "&oauth_consumer_secret=" + oauth_consumer_secret);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requestToken);
req.Method = "POST";
try
{
  using (var response = req.GetResponse() as HttpWebResponse)
  if (req.HaveResponse && response != null)
  {
  }
}
catch (WebException wex)
{
}

代码是不完整的,但通过它运行,我似乎总是得到一个Forbidden异常?

如果我按如下方式发布URL请求,它会正常工作并返回令牌

https://twitter.com/oauth/request_token?oauth_consumer_key=bidjtABOkF0b3mvw1UaHWDf7x&oauth_consumer_secret=qWO208QapZvckBoyWu3QET8uFnBXXlG3tSTWSS8oAOtoY8qwHD

我做错了什么吗?

c# Twitter请求OAuth令牌

通过使用Task/async并添加授权OAuth头来解决我的问题。现在可以获得访问令牌

这是我的解决方案:

public async Task<ActionResult> AccessToken()
{                       
      var httpClient = new HttpClient();
      var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitter.com/oauth2/token");
      string oauth_consumer_key = "<consumer key>";
      string oauth_consumer_secret = "<consumer secret>";
      string url = "https://api.twitter.com/oauth2/token?oauth_consumer_key=" + oauth_consumer_key + "&oauth_consumer_secret=" + oauth_consumer_secret;
      var customerInfo = Convert.ToBase64String(new UTF8Encoding()
                          .GetBytes(oauth_consumer_key + ":" + oauth_consumer_secret));
     // Add authorization to headers
      request.Headers.Add("Authorization", "Basic " + customerInfo);
      request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8,
                                                          "application/x-www-form-urlencoded");
      HttpResponseMessage response = await httpClient.SendAsync(request);
      string json = await response.Content.ReadAsStringAsync();
      var serializer = new JavaScriptSerializer();
      dynamic item = serializer.Deserialize<object>(json);
      ViewBag.access_token = item["access_token"];
      return View();            
    }