Twitter API возвращает 401 несанкционированных - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь искать твиты по местоположению в Unity3D с помощью Twitter API. У меня проблема с созданием подписи аутентификации. Когда я пытаюсь отправить запрос от Postman и использовать сгенерированный заголовок, он также работает в Unity, но когда я пытаюсь создать подпись в Unity самостоятельно, я всегда получаю 401 Unauthorized error от сервера. Так что я уверен, что токены и секреты работают, единственная проблема - подпись. Вот как я создал подпись:

private string CreateSignature(string url)
{
    var stringBuilder = new StringBuilder();
    stringBuilder.Append("POST&");
    stringBuilder.Append(Uri.EscapeDataString(url));
    stringBuilder.Append("&");

    var dictionary = new SortedDictionary<string, string>
    {
        {"oauth_consumer_key", _mOauthConsumerKey},
        {"oauth_nonce", _mNonce},
        {"oauth_signature_method", "HMAC-SHA1"},
        {"oauth_timestamp", _mTimeStamp},
        {"oauth_token", _mOauthToken},
        {"oauth_version", "1.0"}
    };

    foreach (var keyValuePair in dictionary)
    {
        stringBuilder.Append(Uri.EscapeDataString(string.Format("{0}={1}&", keyValuePair.Key, keyValuePair.Value)));
    }

    var signatureBaseString = stringBuilder.ToString().Substring(0, stringBuilder.Length - 3);

    var signatureKey = Uri.EscapeDataString(_mOauthConsumerSecret) + "&" +
        Uri.EscapeDataString(_mOauthTokenSecret);

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


    var signatureString = Convert.ToBase64String(hmacsha1.ComputeHash(
            ASCIIEncoding.ASCII.GetBytes(signatureBaseString)));

    return signatureString;
}

А вот как я создаю nonce и timestamp:

_mNonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(
    DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture)));

var timeSpan = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var stamp = ((long)(DateTime.UtcNow - timeSpan).TotalSeconds);
_mTimeStamp = Convert.ToInt64(stamp).ToString(CultureInfo.InvariantCulture);

Большое спасибо.

...