Создать базу подписи для подписи OAuth1 в C # с URL в качестве параметра - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь создать базу сигнатур для вызова API OAuth1. Это не работает, когда у меня есть URL в качестве параметра. Мне нужно сделать что-то особенное?

Когда я отправляю вызов API с моим кодом, он работает нормально, если у меня нет URL-адреса в качестве параметра. Когда я делаю это, он генерирует базу подписей, которая дает неверную подпись для аутентификации. Я могу сделать вызов API с параметром URL через такие программы, как бессонница, но он не работает, когда я пытаюсь сделать это с помощью кода.

Проблема связана с вызовами, содержащими часть "? Осуществляющих (...)". Если они содержат список нормальных параметров, таких как «? Aktive = true & read_only = true», это нормально работает.

Я рассмотрел эту проблему, и проблема заключается в сгенерированной подписи. И единственная проблема, о которой я могу думать, это параметр signatureBase.

var url = "https://www.example.com/api/1/resources?implementing(http://www.example.com/method5/1.2)";
OAuthContext requestContext = new OAuthContext
            {
                RequestMethod = "GET",
                RawUri = new Uri(url),
                ConsumerKey = "somethingsomethingsomething",
                SignatureMethod = "HMAC-SHA1",
                Timestamp = timeStamp,
                Version = "1.0",
                Nonce = nonce,
            };
var signatureBase = requestContext.GenerateSignatureBase();
var signature = Uri.EscapeDataString(Convert.ToBase64String(hmac.ComputeHash(new ASCIIEncoding().GetBytes(signatureBase))));

Одна вещь, о которой я думал, это кодировка URL для signatureBase. Но я не знаю, как это должно быть. База подписи будет выглядеть так:

GET&https%3A%2F%2Fwww.example.com%2Fapi%2F1%2Fresources&%3Dimplementing%2528http%253A%252F%252Fwww.example.com%252Fmethod5%252F1.2%2529...

Где ... - ожидаемый одноразовый номер, метка времени, версия и метод подписи.

Я знаю, что URL-параметр был дважды закодирован, но если я изменю его вручную на одно кодированный, это не поможет. Так и есть:

GET&https%3A%2F%2Fwww.example.com%2Fapi%2F1%2Fresources&%3Dimplementing%28http%3A%2F%2Fwww.example.com%2Fmethod5%2F1.2%29...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...