【问题标题】:Cannot exchange authorization code for long-lived access token with SurveyMonkey API无法使用 SurveyMonkey API 交换长期访问令牌的授权代码
【发布时间】:2014-02-14 19:33:49
【问题描述】:

我已经获得了使用 SurveyMonkey API 的 OAuth 流程的前半部分,但是当我尝试将短期授权代码交换为长期 OAuth 访问令牌时,我收到了 HTTP 400 响应。这是the SurveyMonkey OAuth Guide.的第三步

这是完整交换的删减版:

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_urithe example Python guide uses redirect_url. 哪个是正确的参数?我可以完全省略吗?我的服务器当然不关心被重定向到任何地方。

【问题讨论】:

    标签: oauth-2.0 surveymonkey


    【解决方案1】:

    事实证明,这个POST 所需的Content-Typeform 编码——application/x-www-form-urlencoded,而不是 JSON。

    请注意,文档实际上并没有在任何地方这么说;我是implied by the example usage of the Python requests library.

    【讨论】:

    • 而且,事实证明,redirect_uri 必须完全匹配指定的原始值。
    • 我们在 developer.surveymonkey.com 上的 oauth 指南确实记录了 redirect_uri 必须匹配并具有正确的参数名称。但是,我们绝对可以更清楚地了解表单编码,我会做一个说明来澄清这一点。还将清理该 GitHub 代码。感谢您的反馈。
    • @MilesCederman-Haysom 感谢快速跟进。该指南说 redirect_uri 在步骤 1 必须匹配。第 3 步中没有提到 redirect_uri 的此类要求或目的。坦率地说,除了不便之外,我没有看到步骤 3 中的 redirect_uri 添加任何其他内容 - 要求它真的以任何方式提高了安全性吗?有没有机会看到该要求被取消?
    • 公平地说,里面也没有说它应该被改变——它有相同的变量名,所以它应该与之前的匹配,并且无论如何它应该匹配 Mashery 帐户上的内容.出于兴趣,您将 redirect_uri 更改为什么?不过,我还将添加到票证中以更清楚地说明该要求,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2020-07-01
    • 2017-09-28
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多