Amazon Alexa 获取访问令牌

Amazon Alexa Get Access token

我正在编写一个 SmartHome 技能,需要一个访问令牌来 post 设备(门铃)的异步通知。文档令人困惑 - 但据我推断 - 我应该从 Alexa 控制台获取我的 client_id 和 client_secret,并在初始技能 connection/authorization 期间获取 Bearer Token,然后通过 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_idclient_secretgrant_types 是有效的,因为当我将它们更改为故意错误的内容时,我会得到一些预期的错误)。

知道我做错了什么吗??

代码只能使用一次 - 无论成功与否。因此,即使您使用它并且您的请求被搞砸或以其他方式不起作用 - 您也无法重用它。我唯一能够处理的就是禁用技能,re-enabled它,然后窥探并使用给定的代码。