Почему моя подпись OAuth не совпадает при подключении к WordPress через OAuth 1.0 в C#?

Я пытаюсь выполнить первый шаг в процессе аутентификации OAuth 1.0 и получить токен несанкционированного запроса.

Я продолжаю получать ошибку 401 OAuth, которая не соответствует ошибке от WordPress. Я знаю, что проблема в том, как я хеширую свою подпись, потому что, когда я использую Postman, подпись, которую я вычисляю, отличается от подписи, которую вычисляет Postman. Также я могу успешно получить токен несанкционированного запроса через Postman.

Где я ошибаюсь при вычислении хэша? Я использую HMAC-SHA1.

    private void AuthorizeWP()
    {
        string requestURL = @"http://mywordpressurl.com/oauth1/request";
        UriBuilder tokenRequestBuilder = new UriBuilder(requestURL);
        var query = HttpUtility.ParseQueryString(tokenRequestBuilder.Query);
        query["oauth_consumer_key"] = "myWordPressKey";
        query["oauth_nonce"] = Guid.NewGuid().ToString("N");
        query["oauth_signature_method"] = "HMAC-SHA1";
        query["oauth_timestamp"] = (Math.Truncate((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds)).ToString();
        string signature = string.Format("{0}&{1}&{2}", "GET", Uri.EscapeDataString(requestURL), Uri.EscapeDataString(query.ToString()));
        string oauth_Signature = "";
        using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret")))
        {
            byte[] hashPayLoad = hmac.ComputeHash(Encoding.ASCII.GetBytes(signature));
            oauth_Signature = Convert.ToBase64String(hashPayLoad);
        }
        query["oauth_signature"] = oauth_Signature;
        tokenRequestBuilder.Query = query.ToString();
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(tokenRequestBuilder.ToString());
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    }

person Adam    schedule 25.01.2017    source источник


Ответы (1)


Теперь я понимаю, что я делал не так.

В OAuth 1.0, когда вы создаете байты для своего хеш-ключа, вам необходимо объединить свой секрет потребителя/клиента и токен со знаком «&» посередине, даже если у вас нет токена.

Источник: https://oauth1.wp-api.org/docs/basics/Signing.html

Итак, в моем коде выше:

using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret")))

должно быть:

using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret&"))

person Adam    schedule 25.01.2017