2014-01-24 4 views
0

У меня есть начальная половина потока 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. Какой правильный параметр? Могу ли я полностью его опустить? Мой сервер, конечно, не заботится о перенаправлении куда угодно.

ответ

3

Как выясняется, требуемый для этого Content-TypePOST является формы кодирования - application/x-www-form-urlencoded, не JSON.

Обратите внимание, что документация на самом деле не говорит об этом; это implied by the example usage of the Python requests library.

+0

И, как выясняется, 'redirect_uri' должен ** точно ** соответствовать указанному первоначальному значению. –

+0

Наш справочник oauth на developer.surveymonkey.com делает заметку о том, что redirect_uri имеет совпадение и имеет правильное имя параметра. Однако мы могли бы четко разъяснить форму кодировки, я сделаю заметку, чтобы прояснить это. Также очистит этот код GitHub. Спасибо за ответ. –

+0

@ MilesCederman-Haysom ценят быстрое наблюдение. В руководстве говорится, что «redirect_uri' ** на шаге 1 ** должен совпадать. Ничто в шаге 3 не упоминает такие требования или назначение «redirect_uri». Честно говоря, я не вижу, чтобы «redirect_uri» на шаге 3 добавлял что-то кроме неудобства - действительно ли возникает необходимость в каком-либо улучшении безопасности? Есть ли шанс увидеть, что это требование отменено? –