Как создается подпись OAuth1.0

Я должен авторизовать запрос, используя OAuth1.0. В заголовке ответа требуется токен доступа, OAuth Nonce, Timestamp и OAuthSignature. Я написал методы для создания Timestamp и OAuthNonce. Как создается подпись OAuth с использованием этих параметров? Он использует метод HMAC-SHA1 для хеширования подписи. Как я могу создать метод для генерации ключа подписи OAuth. Может ли кто-нибудь предложить способ создания подписи с использованием этих параметров? Заранее спасибо.

private static string CreateOAuthTimestamp()
        {
            var nowUtc = DateTime.UtcNow;
            var timeSpan = nowUtc - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            var timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
            return timestamp;
        }

 private string CreateOauthNonce()
        {
            return Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        }

person Yadukrishnan M    schedule 29.03.2019    source источник


Ответы (1)


Я нашел метод создания подписи Oauth 1.0. Он требует, чтобы все параметры запроса API были хэшированы в алгоритме SHA1.

private string CreateOauthSignature
       (string resourceUrl, string oauthNonce, string oauthTimestamp , 
SortedDictionary<string, string> requestParameters)
    {
        //Add the standard oauth parameters to the sorted list        
        requestParameters.Add("oauth_consumer_key", consumerKey);
        requestParameters.Add("oauth_nonce", oauthNonce);
        requestParameters.Add("oauth_signature_method", OauthSignatureMethod);
        requestParameters.Add("oauth_timestamp", oauthTimestamp);
        requestParameters.Add("oauth_token", accessToken);
        requestParameters.Add("oauth_version", OauthVersion);

        var sigBaseString = requestParameters.ToWebString();

        var signatureBaseString = string.Concat
        ("GET", "&", Uri.EscapeDataString(resourceUrl), "&",
                            Uri.EscapeDataString(sigBaseString.ToString()));

        //Using this base string, encrypt the data using a composite of the 
        //secret keys and the HMAC-SHA1 algorithm.
        var compositeKey = string.Concat(Uri.EscapeDataString(consumerKeySecret), "&",
                                         Uri.EscapeDataString(accessTokenSecret));

        string oauthSignature;
        using (var hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey)))
        {
            oauthSignature = Convert.ToBase64String(
                hasher.ComputeHash(Encoding.ASCII.GetBytes(signatureBaseString)));
        }
        return oauthSignature;
    }  

ToWebstring () — это метод расширения для преобразования словаря Sorted в веб-строку и кодирования специальных символов. После создания подписи ее можно включить в заголовок авторизации запроса Http вместе с другими параметрами заголовка, а именно. одноразовый номер, временная метка, токен доступа и т. д.

person Yadukrishnan M    schedule 08.04.2019