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

Google Keep API调用授权失败:403 Forbidden错误排查求助

排查Google Keep API 403 Forbidden错误的建议

我来帮你梳理下这个403错误的可能原因,毕竟你已经搞定了服务账号域委派的基础配置,其他SDK都正常,大概率是Keep API特有的细节没注意到:

1. 先确认Google Keep API是否已启用

别小看这个基础步骤!哪怕你有其他Google API权限,Keep API默认是未启用的。你需要登录Google Cloud Console,找到「API和服务」→「启用API和服务」,搜索Google Keep API并启用它。

2. 修正API请求的认证方式和URL格式

你的代码里有两个小问题,很可能触发了Google的反自动化拦截:

  • URL里多了一个问号:notes??access_token应该改成notes?access_token(不过更推荐下面的标准认证方式)
  • Google现在不建议把access_token放在URL参数里,而是通过Authorization请求头传递,这会降低被判定为自动化请求的概率

修改后的getKeepNotes函数示例:

const getKeepNotes = async (accessToken: string) => {
  const response = await fetch(`https://keep.googleapis.com/v1/notes`, {
    method: 'GET',
    headers: {
      Accept: 'application/json',
      Authorization: `Bearer ${accessToken}` // 用Bearer头传递token
    },
  });
  
  // 补充错误处理,打印详细错误信息便于排查
  if(!response.ok){
    const errorText = await response.text();
    console.error(`请求失败: ${response.status}`, errorText);
    throw new Error(`Keep API请求失败: ${response.status}`);
  }
  
  return response.json();
};

3. 再次核对域委派的权限配置

虽然你说已经配置了域委派,但再仔细检查一遍:

  • 在Google Workspace Admin Console的「安全」→「API控制」→「域范围委派」里,确认服务账号的客户端ID已经添加,并且关联了https://www.googleapis.com/auth/keep这个权限范围,没有拼写错误
  • 确保被 impersonate 的用户(users[i].primaryEmail)属于你的授权域,且没有被限制API访问

4. 检查请求频率限制

如果你的users列表比较长,循环调用API的频率太高,可能触发Google的Rate Limit。可以在循环里加个小延迟,避免被判定为批量自动化请求:

for (let i = 0; i < users.length; i++) {
  const accessToken = await generateAccessToken(originalEmail, originalKey, users[i].primaryEmail);
  const keep = await getKeepNotes(accessToken);
  console.log(keep);
  // 加1秒延迟,降低请求频率
  await new Promise(resolve => setTimeout(resolve, 1000));
}

5. 验证服务账号的Impersonation权限

可以先单独测试一个已知的用户(比如你自己的邮箱),看看是否能成功调用,排除个别用户的权限问题。如果单个用户也失败,那大概率是全局的权限或API启用问题;如果单个用户成功,那可能是部分用户的配置问题或者频率限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:57:43