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, которые вы делаете.

https://oauth.net/core/1.0a/:

Параметры протокола OAuth отправляются в заголовке авторизации следующим образом:

Имена и значения параметров кодируются в соответствии с Кодировкой параметров. Для каждого параметра сразу за именем следует символ "=" (код ASCII 61), символ "" (код 34 ASCII), значение параметра (МОЖЕТ быть пустым) и другой символ "" (код ASCII). 34). Параметры разделяются запятой (код ASCII 44) и ДОПОЛНИТЕЛЬНЫМИ линейными пробелами в соответствии с [RFC2617]. Дополнительный параметр области добавляется и интерпретируется в соответствии с [RFC2617], раздел 1.2.

Обновление для тех, кто нашел это сейчас, Xero API теперь имеет OAuth2 в общедоступной бета-версии https://developer.xero.com/documentation/oauth2/overview

Другие вопросы по тегам