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

使用NodeJS通过服务账号调用Google Directory API列用户遇400错误

问题原因与解决方法

出现400 Invalid Input错误的核心原因是:服务账号调用Google Workspace Directory API必须配置域范围委派,并且在认证时指定要模拟的Workspace管理员账号,你目前的脚本和配置都遗漏了这两个关键步骤。

步骤1:配置域范围委派

  • 打开Google Cloud控制台,找到你的服务账号详情页,点击「编辑」,找到「域范围委派」选项,勾选「启用Google Workspace域范围委派」,保存设置。
  • 打开Google Workspace管理控制台,进入「安全性」→「API控制」→「域范围委派」,点击「添加新的客户端ID」:
    • 输入服务账号的「客户端ID」(可在Cloud控制台服务账号的「详情」→「客户端ID」处找到)
    • 在「OAuth 2.0 范围」里输入https://www.googleapis.com/auth/admin.directory.user.readonly,保存。

步骤2:修正脚本

必须在认证配置中添加subject字段,指定一个拥有Workspace用户管理权限的管理员邮箱(比如admin@yourdomain.com),让服务账号模拟该管理员身份调用API。同时可以添加结果打印代码方便调试:

const { google } = require("googleapis");

(async () => {
  try {
    const auth = new google.auth.GoogleAuth({
      keyFile: "credentials.json",
      scopes: ["https://www.googleapis.com/auth/admin.directory.user.readonly"],
      // 新增:指定要模拟的Workspace管理员邮箱
      subject: "admin@yourdomain.com" 
    });

    const service = google.admin({ version: "directory_v1", auth });
    const res = await service.users.list({
      customer: "my_customer",
      maxResults: 10,
      orderBy: "email",
    });

    // 打印返回的用户列表
    const users = res.data.users;
    if (users.length) {
      console.log('Users:');
      users.forEach((user) => {
        console.log(`${user.email} (${user.name.fullName})`);
      });
    } else {
      console.log('No users found.');
    }
  } catch (err) {
    console.error('Error fetching users:', err);
  }
})();

额外注意事项

  • 确保你指定的subject邮箱是Google Workspace的管理员账号,且拥有查看用户列表的权限。
  • 确认Admin SDK API已经在Cloud控制台中启用(你已经完成这一步,可忽略)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:47:02