Я звоню на следующий StackPath
Я пробовал различные существующие библиотеки, такие как oauth и MaxCDN , которые возвращают ответ:
{"code":500,"error":{"message":"Invalid signature","type":""}}
Все запросы Get, использующие указанную выше библиотеку oauth, работают нормально, но не для POST.
С помощью Почтальона мне удалось сделать успешную публикацию в API, но я не уверен, как они генерируют свои подписи, используя вкладку Авторизация.
Я создал класс для создания Авторизации вручную, используя следующее ...
sb создает значение заголовка Authorization:
public string GenerateAuthorizationHeader(string method, string url)
{
StringBuilder sb = new StringBuilder("OAuth ");
sb.Append("oauth_consumer_key=\"" + _consumer_key + "\",");
sb.Append("oauth_nonce=\"" + _nonce + "\",");
sb.Append("oauth_signature=\"" + GetSignature() + "\",");
sb.Append("oauth_signature_method=\"" + _signature_method + "\",");
sb.Append("oauth_timestamp=\"" + _timestamp + "\",");
sb.Append("oauth_version=\"" + _version + "\"");
return sb.ToString();
}
GetSignature () создает базовую строку:
private string GetSignatureBaseString()
{
string basestring = "oauth_consumer_key=" + Uri.EscapeDataString(_consumer_key);
basestring += "&" + "oauth_nonce=" + Uri.EscapeDataString(_nonce);
basestring += "&" + "oauth_signature_method=" + Uri.EscapeDataString(_signature_method);
basestring += "&" + "oauth_timestamp=" + Uri.EscapeDataString(_timestamp);
basestring += "&" + "oauth_version=" + Uri.EscapeDataString(_version);
basestring = _method + "&" + Uri.EscapeDataString(_url) + "&" + Uri.EscapeDataString(basestring);
return basestring;
}
Базовая строка хэшируется с использованием секрета потребителя, и GetSignature () возвращает строку:
private string GetHashedSignature(string baseString)
{
var encode = new ASCIIEncoding();
byte[] keyBytes = encode.GetBytes(_consumer_secret);
byte[] msgBytes = encode.GetBytes(baseString);
string result = "";
using (HMACSHA1 sha1 = new HMACSHA1(keyBytes))
{
var hashed = sha1.ComputeHash(msgBytes);
result = Convert.ToBase64String(hashed);
}
return Uri.EscapeDataString(result);
}
И GET, и POST не работают, используя мой код. Может кто-нибудь найти ошибку в моем коде или предоставить какую-либо информацию о том, как Postman генерирует свои значения заголовка авторизации OAuth 1.0, в частности oauth_signature?
** Edit Я пошел с RestSharp - не стесняйтесь отвечать для будущих пользователей.