2016-09-02 14 views
0

私のコンシューマーキーとコンシューマーの秘密鍵に基づいてTwitter APIからトークンを要求しようとしています。しかし、私はThe remote server returned an error: (403) Forbiddenを取得していますが、それはなぜわかりませんか?C#TwitterリクエストOAuthトークン

これは私の試みは、これまで

//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

私が何か間違ったことをやっていますか?

答えて

0

Task/Asycを使用し、認証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();    
    }