У меня есть начальная половина потока OAuth, работающая с API SurveyMonkey, но когда я пытаюсь обменять краткосрочный код авторизации на долгоживущий OAuth, я получаю ответ HTTP 400. Это шаг 3 из the SurveyMonkey OAuth Guide.Невозможно обменять код авторизации для токена доступа с помощью SurveyMonkey API
Вот извлечено вариант полного обмена:
POST /oauth/token?api_key=<removed> HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 338
Content-Type: application/json; charset=utf-8
Host: api.surveymonkey.net
User-Agent: HTTPie/0.7.2
{
"client_id": "<removed>",
"client_secret": "<removed>",
"code": "dKkIJYnimBli3TMHoTdHoT-zkzkUFzfHeaWJJyPVmrYG35R5Q-jLLU-Y7Fg3BR0n3tVTQ6sAmDnwVxHXSjZVdiYTJ7u7SWbLCKgQa061bKJYXSpRhTsEL0v5GMWcMEBC2vje5UjRHp3SScFQEwIIjHKZH5raC5RQJJh.JYWEOqw8Iy-2Ds7km1zYaHGGlxqu",
"grant_type": "authorization_code",
"redirect_uri": "https://app.hubspotqa.com"
}
HTTP/1.1 400 Bad Request
Cache-Control: no-store
Connection: keep-alive
Content-Length: 96
Content-Type: application/json; charset=UTF-8
Date: Fri, 24 Jan 2014 00:05:53 GMT
SM-Request-ID: 41264d11-b93d-4f8b-ad1a-c656ccfa268b
Server: nginx
{
"error": "invalid_request",
"error_description": "Invalid POST body or Content-Type received."
}
Я могу воспроизвести ту же самую ошибку с помощью других клиентов HTTP, а также, но у меня нет никаких проблем вручную, получая токен доступа с использованием the SurveyMonkey API console. Что я делаю неправильно?
Боковой вопрос: руководство OAuth говорит, что шаг 3 принимает redirect_uri
но the example Python guide uses redirect_url
. Какой правильный параметр? Могу ли я полностью его опустить? Мой сервер, конечно, не заботится о перенаправлении куда угодно.
И, как выясняется, 'redirect_uri' должен ** точно ** соответствовать указанному первоначальному значению. –
Наш справочник oauth на developer.surveymonkey.com делает заметку о том, что redirect_uri имеет совпадение и имеет правильное имя параметра. Однако мы могли бы четко разъяснить форму кодировки, я сделаю заметку, чтобы прояснить это. Также очистит этот код GitHub. Спасибо за ответ. –
@ MilesCederman-Haysom ценят быстрое наблюдение. В руководстве говорится, что «redirect_uri' ** на шаге 1 ** должен совпадать. Ничто в шаге 3 не упоминает такие требования или назначение «redirect_uri». Честно говоря, я не вижу, чтобы «redirect_uri» на шаге 3 добавлял что-то кроме неудобства - действительно ли возникает необходимость в каком-либо улучшении безопасности? Есть ли шанс увидеть, что это требование отменено? –