You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nest Device API获取Access Token时遇invalid_grant错误求助

解决Nest Device API获取Access Token时的invalid_grant错误

我之前也碰到过一模一样的问题,invalid_grant + "Bad Request"这个错误通常和授权码有效性、参数匹配度这些细节有关,咱们一步步排查:

1. 确认授权码的时效性与单次使用限制

OAuth2的授权码code是一次性有效的,而且有效期只有短短几分钟。如果你之前用这个code请求过Token(哪怕请求失败),这个code就直接失效了。

  • 解决方法:重新走授权流程获取全新的code,拿到后立刻调用Token接口,别放置太久。

2. 严格匹配回调地址(redirect_uri)

这是最容易踩的坑!GCP控制台中配置的OAuth2授权回调地址,必须和你请求Token时传入的redirect_uri完全一致:

  • 包括http/https协议、端口号、路径,甚至末尾的斜杠都不能有差异
  • 检查路径:比如你代码里用的是http://localhost:3000/connect/callback,去GCP的「API和服务」→「凭据」→对应OAuth 2.0客户端ID的「授权重定向URI」列表,确认有完全相同的条目

3. 改用Form Data格式传递参数(避免URL拼接编码问题)

你当前把参数直接拼在URL上,如果参数里包含特殊字符(比如&、=、%),会导致参数解析错误,触发Bad Request。建议改用POST的Form Data格式传递参数:

const credentials = require('../../../credentials.json');
const { code } = router.query; // Auth Code
try {
  const params = new URLSearchParams({
    client_id: credentials.web.client_id,
    client_secret: credentials.web.client_secret,
    code: code,
    grant_type: 'authorization_code',
    redirect_uri: REDIRECT_URL
  });

  const response = await fetch('https://www.googleapis.com/oauth2/v4/token', {
    method: 'POST',
    body: params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  });
  
  // 一定要解析JSON看详细响应
  const tokenData = await response.json();
  console.log(tokenData);
} catch (e) {
  console.error(e);
}

这种方式会自动处理URL编码,避免参数截断或解析错误。

4. 验证项目与凭据的匹配性

  • 确认你使用的PROJECT_ID是绑定Nest Device API的那个项目ID
  • 检查credentials.json里的client_id和client_secret,是否属于该项目下创建的OAuth客户端(别下载错了其他项目的凭据文件)

5. 规范curl测试命令

如果用curl测试,建议用-d参数传递表单数据,而非直接拼接URL:

curl -X POST https://www.googleapis.com/oauth2/v4/token \
  -d "client_id=你的客户端ID" \
  -d "client_secret=你的客户端密钥" \
  -d "code=新获取的授权码" \
  -d "grant_type=authorization_code" \
  -d "redirect_uri=http://localhost:3000/connect/callback"

最后提醒:调用接口后一定要解析返回的JSON数据,而不是只打印response对象,这样能看到更详细的错误提示,帮助定位问题。

内容的提问来源于stack exchange,提问作者K20GH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:47:34