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

使用Google服务账号调用Directory API如何列出所有现有日历资源?

服务账号调用Google Directory API获取公司日历资源404问题解决方案

出现404错误并非对应日历资源不存在,而是服务账号默认不属于企业域用户体系,未被授予域资源访问权限,也未模拟有权限的域用户发起请求,可按以下步骤配置:

1 控制台权限配置

  • 首先在Google Cloud控制台对应项目中,开启Directory API的访问权限
  • 进入Google Workspace Admin控制台,路径:安全 → 访问和数据控制 → API控制 → 域范围委派
  • 点击添加新客户端,填入服务账号的客户端ID,在权限字段添加所需OAuth scope:
    只读权限填写:https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly
    读写权限填写:https://www.googleapis.com/auth/admin.directory.resource.calendar
  • 保存配置后等待2-5分钟让权限生效

2 代码侧调整

你当前请求直接使用服务账号本身身份发起,访问不到企业域的my_customer资源,必须在初始化认证客户端时指定要模拟的域管理员账号(即你之前可以正常拉取资源的个人用户账号即可)。
以你使用的google-api-nodejs-client为例,参考代码如下:

const {google} = require('googleapis');
// 导入服务账号密钥文件
const serviceAccountKey = require('./service-account-key.json');

// 初始化JWT认证客户端
const authClient = new google.auth.JWT(
  serviceAccountKey.client_email,
  null,
  serviceAccountKey.private_key,
  // 填写和控制台域范围委派一致的scope
  ['https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly'],
  // 新增该参数,值为有权限访问日历资源的域管理员邮箱
  'your-admin-account@your-company.com'
);

// 初始化Directory客户端发起请求
const directory = google.admin({ version: 'directory_v1', auth: authClient });
const response = await directory.resources.calendars.list({
  customer: 'my_customer'
});
console.log(response.data.items);

3 异常排查

如果配置完成后仍报错,可按以下顺序排查:

  • 确认模拟的账号确实有权限访问Directory日历资源,用该账号登录Google Workspace Admin控制台可正常查看日历资源即可
  • 确认控制台配置的scope和代码中请求的scope完全一致
  • 确认服务账号的客户端ID填写正确,不要填成服务账号邮箱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:54:08