2017-01-25 3 views
0

Я пытаюсь завершить первый этап процесса аутентификации OAuth 1.0 и получить неавторизованный токен запроса.Почему моя подпись OAuth не соответствует при подключении к WordPress через OAuth 1.0 в C#?

Я продолжаю получать подпись 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(); 
    } 

ответ

0

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

С 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&"))

Смежные вопросы