簡體   English   中英

C#Twitter和Restsharp身份驗證

[英]C# Twitter and Restsharp Authentication

我已經在C#中創建了一個請求,以便在Twitter中檢索用戶主時間軸,但是卻收到{“message”:“Could not authenticate you”,“code”:32}錯誤。 這是我嘗試訪問Twitter REST API的方式:

var stringBuilder = new StringBuilder();
stringBuilder.Append("GET&");
stringBuilder.Append(Uri.EscapeDataString(baseString));
stringBuilder.Append("&");

//the key value pairs have to be sorted by encoded key
var sd = new SortedDictionary<string, string> ();

sd.Add("oauth_version", "1.0");
sd.Add ("oauth_consumer_key", twitterOauthConsumerKey);
sd.Add("oauth_nonce", twitterOauthNonce);
sd.Add("oauth_signature_method", "HMAC-SHA1");
sd.Add("oauth_timestamp", twitterOauthTimestamp);
sd.Add("oauth_token", twitterOauthToken);

//GS - Build the signature string


foreach (var keyValuePair in sd)
{
    //append a = between the key and the value and a & after the value
    stringBuilder.Append(Uri.EscapeDataString(string.Format("{0}={1}&", keyValuePair.Key, keyValuePair.Value)));
}
string signatureBaseString = stringBuilder.ToString().Substring(0, stringBuilder.Length - 3);

//generation the signature key the hash will use
string signatureKey =
    Uri.EscapeDataString(twitterOauthConsumerKey) + "&" +
    Uri.EscapeDataString(twitterOauthToken);

var hmacsha1 = new HMACSHA1(
    new ASCIIEncoding().GetBytes(signatureKey));

//hash the values
string signatureString = Convert.ToBase64String(
    hmacsha1.ComputeHash(
        new ASCIIEncoding().GetBytes(signatureBaseString)));

Console.WriteLine (signatureString);

var request = new RestRequest("statuses/home_timeline.json", Method.GET);
request.AddParameter ("oauth_consumer_key", twitterOauthConsumerKey);
request.AddParameter ("oauth_signature_method", "HMAC-SHA1");
request.AddParameter ("oauth_timestamp", twitterOauthTimestamp);
request.AddParameter ("oauth_nonce", twitterOauthNonce);
request.AddParameter ("oauth_version", "1.0");
request.AddParameter ("oauth_token", twitterOauthToken);
request.AddParameter ("oauth_signature", signatureString);

var client = new RestClient ("https://api.twitter.com/1.1");
client.ExecuteAsync (request, response => {

    Console.WriteLine(response.Content);
});

我覺得我已經創建了正確的簽名字符串。 並且用戶已完全通過身份驗證。 應用程序權限適用於“讀寫”。

var twitterOauthToken = twitter.Properties ["oauth_token"].ToString ();
var twitterOauthTokenSecret = twitter.Properties ["oauth_token_secret"].ToString ();
var twitterOauthConsumerKey = twitter.Properties ["oauth_consumer_key"].ToString ();
var twitterOauthConsumerSecret = twitter.Properties ["oauth_consumer_secret"].ToString ();


var request = new RestRequest("1.1/statuses/user_timeline.json");

var client = new RestClient("https://api.twitter.com")
    {
        Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource(twitterOauthConsumerKey, twitterOauthConsumerSecret, twitterOauthToken, twitterOauthTokenSecret)
    };
client.ExecuteAsync (request, response => {
                    Console.WriteLine(response.Content);
                    var rootObject = JsonConvert.DeserializeObject<Floadt.Core.Twitter.RootObject> (response.Content);
                    //((TableSource)table.Source).facebookData = rootObject;
                });

簡單的解決方案我完全想不通

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM