OAuth2 конечная точка пост-запроса Xero
Во-первых, я не использую Xero API. Это скорее вопросы OAuth2, чем, в частности, Xero.
Не совсем уверен, является ли проблема общей проблемой OAuth2 или реализацией OAuth2 в Xero. Я могу успешно пройти аутентификацию, получить свои токены и т. Д. От Xero. Я даже могу делать успешные запросы Get на их конечные точки для счетов и контактов. Моя проблема состоит в том, чтобы пытаться что-либо ПОСТАВИТЬ, то есть создать счет.
Сервер отвечает 400 Неверный запрос. Я подтвердил, что фактические почтовые данные верны, поместив XML в тестер API, и там все хорошо.
Должен ли почтовый запрос быть стандартным httpwebequest
, (POST) со строкой запроса ?oauth_signature=[sig here]
, а фактический URL данных поста закодирован и отправлен через стрим? Является ли моя реализация правильной, и я должен искать проблему в другом месте? Должны ли данные, отправленные в форме, быть включены в подпись?
{
byte[] reqData = encode.GetBytes(postData);
HttpWebRequest request = WebRequest.CreateHttp(url + querystring) as HttpWebRequest;
request.Method = "POST";
try {
using (Stream stream = request.GetRequestStream) {
stream.Write(reqData, 0, reqData.Length);
}
using (HttpWebResponse response = request.GetResponse) {
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
dynamic responseFromServer = reader.ReadToEnd();
return responseFromServer;
}
} catch (Exception ex) {
}
}
1 ответ
Xero использует OAuth1.0a, а не OAuth2. Подпись OAuth должна быть указана в виде заголовка, а не строки запроса. Я считаю, что это должно быть точно так же, как успешные запросы GET, которые вы делаете.
Параметры протокола OAuth отправляются в заголовке авторизации следующим образом:
Имена и значения параметров кодируются в соответствии с Кодировкой параметров. Для каждого параметра сразу за именем следует символ "=" (код ASCII 61), символ "" (код 34 ASCII), значение параметра (МОЖЕТ быть пустым) и другой символ "" (код ASCII). 34). Параметры разделяются запятой (код ASCII 44) и ДОПОЛНИТЕЛЬНЫМИ линейными пробелами в соответствии с [RFC2617]. Дополнительный параметр области добавляется и интерпретируется в соответствии с [RFC2617], раздел 1.2.
Обновление для тех, кто нашел это сейчас, Xero API теперь имеет OAuth2 в общедоступной бета-версии https://developer.xero.com/documentation/oauth2/overview