问题描述
我正在尝试从 api https://api.amazon.com/auth/o2/token
获取访问令牌POST /auth/o2/token HTTP/l.l
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=refresh_token
&refresh_token=Aztr|...
&client_id=foodev
&client_secret=Y76SDl2F
但是在 POST 请求之后,我收到 500 服务器错误。
是不是因为我的应用处于草稿状态?或者我在提出请求时遗漏了什么?
如果是因为草稿状态,那么状态什么时候会改变?对此有何想法。
提前感谢您的帮助。
解决方法
文档有误。我遇到了完全相同的错误,并在 github 问题上遇到了 this 评论,其中提到必须将数据传递到请求正文中,而不是作为查询字符串参数。果然,这对我有用,我能够获得访问令牌。所以澄清一下:grant_type
、refresh_token
、client_id
和 client_secret
应该传递到 POST
请求的 body 中到 https://api.amazon.com/auth/o2/token 而不是作为查询字符串参数。
草稿状态不会阻止您请求和接收访问令牌。
以下是一些需要检查的事情,因为从文档中的示例发布请求中可以得出的内容不多:
- 您是否正确配置了 AWS IAM role / policy / user
- 您在注册应用程序时是否使用了正确的 IAM ARN
- 您是否使用了正确的 LWA 凭据(我假设您没有传递
foodev
和Y76SDl2F
,因为它们是示例参数) - 您是否自行授权了应用程序(您是否使用生成的刷新令牌? 授权申请)
- 您是否在代币交换之前“担任角色”——这是非常重要的一步 并且与 MWS 处理访问的方式相比有很大不同——如果 你没有,服务器将拒绝令牌交换,无论是否刷新 令牌是正确的。更多相关信息here
这是一个非详尽列表,只是我看到其他开发人员在开发过程中获取访问令牌时遇到的一些常见问题,如果这些问题不起作用,您将需要与支持人员合作,因为他们可以看到请求命中令牌端点。