LWA授权码兑换AccessToken失败:invalid_grant问题求助
Alexa Skill LWA Accept Grant 400错误排查及疑问解答
一、"invalid_grant"错误排查
针对你遇到的The request has an invalid grant parameter : code错误,按以下方向逐一排查:
1. 检查code的有效性
- Accept Grant指令返回的code是一次性、短有效期(通常5分钟内)的,重复使用或超时都会触发该错误。确保你使用的是刚收到的、未用过的code。
- 确认code提取完整,没有截断、多空格或字符遗漏,尤其是从AcceptGrant的payload里解析时别出错。
2. 验证client_id/secret与技能的绑定关系
- 新建的LWA安全配置必须和当前Alexa Skill正确关联:进入Alexa开发者控制台,打开技能的「权限」设置,确认选中的是你刚创建的LWA配置,而非旧配置或其他无关配置。
- 核对client_id和client_secret是否属于同一个LWA配置,别把不同配置的凭据混在一起用。
3. 修正请求格式问题
你设置了content-type: application/x-www-form-urlencoded,但axios默认会将JS对象转为JSON格式,而非表单格式,这会导致参数解析错误。修改请求代码,用qs.stringify()转换参数:
const qs = require('qs'); const data = { "grant_type": grant_type, "client_id": client_id, "client_secret": client_secret, "code": code, }; let authResponse = await axios.post(url, qs.stringify(data), { headers: {'content-type': 'application/x-www-form-urlencoded'} });
同时确认请求URL是正确的LWA令牌端点:https://api.amazon.com/auth/o2/token,别混淆测试/生产环境。
4. 确认grant_type拼写正确
确保grant_type的值是准确的authorization_code,没有拼写错误(比如少下划线、字母拼写错误)。
二、关于client_id/client_secret不一致的疑问
LWA的client_id和client_secret是固定值,不会随时间自动变更。出现已发布技能Lambda中的值与控制台不一致的情况,通常是以下原因:
- 之前的技能使用的是另一个LWA安全配置,后续控制台的配置被替换/修改,但Lambda代码未同步更新。
- 误创建了多个LWA安全配置,当前控制台显示的是新配置,而Lambda仍在使用旧配置的凭据。
- 检查技能「权限」设置里关联的LWA配置,确认和Lambda中使用的是否为同一个。
内容的提问来源于stack exchange,提问作者JSNerd01
相关产品推荐
相关产品推荐

