Несанкционированный доступ при публикации статуса в Twitter с помощью RestSharp и oAuth1.0a - PullRequest
1 голос
/ 09 января 2020

РЕДАКТИРОВАТЬ: Моя первоначальная проблема была связана с проблемой брандмауэра, теперь моя проблема в моем разрешении. Я получаю оба метода ниже и «Неавторизованный» ответ.

Я пытаюсь создать метод, который позволит мне публиковать обновление статуса в твиттере. Я пытаюсь использовать в своем приложении, чтобы я мог знать, когда определенные события происходят в течение дня, без необходимости следить за журналами, поэтому я подумал, что это будет крутой способ выдавать уведомления sh. Единственный другой вариант, о котором я мог подумать, - это уведомления по электронной почте, но я хотел попробовать что-то другое (открытое для любых других идей, касающихся pu sh уведомлений)

Я боролся большую часть дня, чтобы попытаться получить это. код для работы. Большинство примеров и вопросов, которые я рассматривал, довольно старые. Ниже приведен код, который я запускаю.

Response.StatusCode = 0 и Response.Content пустые, и я не могу понять, что я делаю здесь неправильно. Не генерируется никаких исключений, поэтому ответ должен выполняться, но ничего не возвращается.

Я следовал приведенному здесь руководству по созданию подписи. https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a/creating-a-signature

Любая обратная связь будет приветствоваться, мне интересно, если есть что-то очевидное, что я делаю неправильно.

Как только у меня есть решение для этого, я ' Я надеюсь поделиться им, как только он будет очищен с гораздо большим количеством комментариев.

Использование кода ниже

Tweet t = new Tweet();
t.TestTweet();

Дополнительные пространства имен

using RestSharp;
using System.Security.Cryptography;

Класс

class Tweet
    {
        private string myFirstMessage = "First Message Using RestSharp";
        private const string baseTwitterURL = "https://api.twitter.com/1.1/statuses/update.json";

        //Keys in Alphabetical Order
        private string oauth_consumer_key = GlobalVariables.ConsumerKey;
        private string oauth_nonce = "abcd";
        private string oauth_signature;
        private string oauth_signature_method = "HMAC-SHA1";
        private string oauth_timestamp;
        private string oauth_token = GlobalVariables.Token;
        private string oauth_version = "1.0";


        private string ConsumerKeySecret = GlobalVariables.ConsumerKeySecret;
        private string AccessTokenSecret = GlobalVariables.AccessTokenSecret;

        public Tweet()
        {

            DateTime epochUtc = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var timestamp = (int)((DateTime.UtcNow - epochUtc).TotalSeconds);

            oauth_timestamp = timestamp.ToString();
        }

        public void TestTweet()
        {
            string fullURL = baseTwitterURL + Uri.EscapeDataString(myFirstMessage);

            var client = new RestClient(fullURL);
            var request = new RestRequest(Method.POST);

            string parameterString = GenerateParameterString(oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version);
            string signatureBaseString = GenerateSignatureBaseString(parameterString);
            string signingKey = GenerateSigningKey();

            HMACSHA1 mySignature = new HMACSHA1();

            oauth_signature = Convert.ToBase64String(mySignature.ComputeHash(new ASCIIEncoding().GetBytes(string.Format("{0}&{1}", signatureBaseString, signingKey))));

            request.AddHeader("authorization", "OAuth");

            request.AddParameter("oauth_consumer_key", oauth_consumer_key);
            request.AddParameter("oauth_nonce", oauth_nonce);
            request.AddParameter("oauth_signature", oauth_signature);
            request.AddParameter("oauth_signature_method", oauth_signature_method);
            request.AddParameter("oauth_timestamp", oauth_timestamp);
            request.AddParameter("oauth_token", oauth_token);
            request.AddParameter("oauth_version", oauth_version);

            string requestString = string.Join(",", request.Parameters.ToList());

            try
            {
                Console.WriteLine("Attemping to send response" + "\n");
                IRestResponse response = client.Execute(request);

            }
            catch (Exception Ex)
            {
                Console.WriteLine("Exception Ex.Message: " + Ex.Message);
                Console.WriteLine("Exception Ex.ToString: " + Ex.ToString());
            }

        }

        public string GenerateParameterString(
            string oauth_consumer_key,
            string oauth_nonce,
            string oauth_signature_method,
            string oauth_timestamp,
            string oauth_token,
            string oauth_version)
        {
            StringBuilder parameterString = new StringBuilder();

            parameterString.Append("include_entities=true&");
            parameterString.Append("oauth_consumer_key=" + Uri.EscapeDataString(oauth_consumer_key) + "&");
            parameterString.Append("oauth_nonce=" + Uri.EscapeDataString(oauth_nonce) + "&");
            parameterString.Append("oauth_signature_method=" + Uri.EscapeDataString(oauth_signature_method) + "&");
            parameterString.Append("oauth_timestamp=" + Uri.EscapeDataString(oauth_timestamp) + "&");
            parameterString.Append("oauth_token=" + Uri.EscapeDataString(oauth_token) + "&");
            parameterString.Append("oauth_version=" + Uri.EscapeDataString(oauth_version) + "&");
            parameterString.Append("status=" + Uri.EscapeDataString(myFirstMessage));


            return parameterString.ToString();
        }

        public string GenerateSignatureBaseString(string parameterString)
        {
            StringBuilder SignatureBaseString = new StringBuilder();

            SignatureBaseString.Append("POST&");
            SignatureBaseString.Append(Uri.EscapeDataString(baseTwitterURL));
            SignatureBaseString.Append("&");
            SignatureBaseString.Append(Uri.EscapeDataString(parameterString));

            return SignatureBaseString.ToString();
        }

        public string GenerateSigningKey()
        {
            StringBuilder SigningKey = new StringBuilder();

            SigningKey.Append(Uri.EscapeDataString(ConsumerKeySecret));
            SigningKey.Append("&");
            SigningKey.Append(Uri.EscapeDataString(AccessTokenSecret));

            return SigningKey.ToString();
        }
    }

Отредактировано: RestSharp OAuth1 Метод аутентификатора

public void TestTweetWithAuthenticator()
{
    string fullURL = baseTwitterURL;
    var client = new RestClient(fullURL)

    {
        Authenticator = OAuth1Authenticator.ForProtectedResource(oauth_consumer_key, ConsumerKeySecret, oauth_token, AccessTokenSecret)
    };
    var request = new RestRequest(Method.POST);

    request.AddParameter("status", Uri.EscapeDataString(myFirstMessage));

    try
    {
        Console.WriteLine("Attemping to send response" + "\n");
        IRestResponse response = client.Execute(request);
    }
    catch (Exception Ex)
    {

    }

}
...