我正在编写一个智能家居技能,需要一个访问令牌来发布设备(门铃)的匿名通知。文档令人困惑-但从我所推断的-我应该从Alexa控制台获取我的client_id和client_secret,并在初始技能连接/授权期间获取承载令牌,然后通过OAuth请求访问令牌(和刷新令牌)。所以我可以得到这三条信息,然后我试着做:
curl -vv X POST -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' -d "\
grant_type=authorization_code\
&code=$CODE\
&client_id=$CLIENT_ID\
&client_secret=$CLIENT_SECRET" \
https://api.amazon.com/auth/o2/token
其中CODE来自初始授权请求,如下所示:
"payload": {
"grant": {
"code": "<<REDACTED>>",
"type": "OAuth2.AuthorizationCode"
},
但这总是给我:{"error_description":"The request has an invalid parameter : code","error":"invalid_grant"}
如果我 * 删除 * code
参数,它抱怨它丢失了,如果我 * 更改 * 代码为无效的东西,错误将从invalid_grant
更改为invalid_request
。因此,它理解代码-但不喜欢整个流程中的某些内容。
(我知道client_id
,client_secret
和grant_types
是有效的,因为当我故意将它们更改为错误时,我会得到一些预期的错误)。
知道我哪里做错了吗?
1条答案
按热度按时间8yparm6h1#
代码只能使用 * 一次 * -无论成功与否。因此,即使您使用它,并且您的请求被搞砸了或无法工作-您也不能重用它。唯一能处理的就是禁用技能,重新启用它,然后窥探并使用给定的 * 新 * 代码。