如何通过Google Admin SDK获取G Suite用户自定义属性?
如何在G Suite中获取用户配置文件的自定义属性?
我之前也碰到过类似的问题,其实核心是默认的Admin SDK调用不会返回自定义属性,得调整几个关键设置才行,一步步来解决:
1. 先明确自定义属性的存储位置
G Suite的自定义用户属性是绑定在自定义Schema下的,不是默认字段。你先去Google Admin控制台确认:
- 进入「用户」→「用户设置」→「自定义用户信息」
- 找到你创建的
Department字段所属的Schema名称(比如可能叫EmployeeInfo或者你自己命名的其他名称),这个很关键,后面调用API要用到。
2. 调整API调用的参数
默认的users.get或users.list方法只返回基础用户数据(比如邮箱、全名),要获取自定义属性,必须指定以下两个参数之一:
方式一:使用projection=full
这个参数会返回用户的所有数据,包括自定义属性。示例代码(Python为例):
from googleapiclient.discovery import build from google.oauth2 import service_account # 初始化Admin SDK服务 SCOPES = ['https://www.googleapis.com/auth/admin.directory.user.readonly'] SERVICE_ACCOUNT_FILE = 'your-service-account-key.json' credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) # 必须指定域管理员账号做委托 delegated_creds = credentials.with_subject('admin@your-domain.com') service = build('admin', 'directory_v1', credentials=delegated_creds) # 获取单个用户,指定projection为full user = service.users().get(userKey='target-user@your-domain.com', projection='full').execute() # 提取自定义属性,替换成你的Schema名称和字段名 department = user.get('customSchemas', {}).get('EmployeeInfo', {}).get('Department') print(f"用户部门:{department}")
方式二:使用fields参数精准指定返回字段
如果你不想获取全量数据,可以用fields指定需要的字段,包括自定义属性:
# 只请求邮箱、全名和自定义Schema数据 user = service.users().get( userKey='target-user@your-domain.com', fields='email,name,customSchemas' ).execute()
3. 检查权限是否足够
确保你的服务账号(或OAuth授权账号)拥有以下权限:
https://www.googleapis.com/auth/admin.directory.user.readonly(只读权限足够)- 同时,在Google Admin控制台的「API控制」里,已经启用了Admin SDK,并且给服务账号授权了相应的域范围权限。
4. 排查常见坑
- 确认目标用户的
Department字段确实有值:有些用户可能没填写该属性,自然返回null,先去Admin控制台查看该用户的自定义信息是否已填写。 - 注意字段名和Schema名称的大小写:API返回的键是区分大小写的,要和Admin控制台里的名称完全一致。
内容的提问来源于stack exchange,提问作者mathsbeauty
相关产品推荐
相关产品推荐

