如何用Python调用GCP Admin API获取谷歌组成员并解决401授权错误
解决GCP Admin Directory API 401未授权问题的脚本修改方案
你的问题核心是直接发起的HTTP请求未携带授权凭证,虽然执行了gcloud auth相关命令,但脚本没有将凭证附加到请求头中,导致API返回401错误。以下是两种可行的修改方案:
方案一:使用官方Google API Python客户端库(推荐)
官方客户端库会自动处理凭证加载、token刷新等逻辑,比手动调用requests更可靠。
步骤1:安装依赖库
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
步骤2:修改后的完整脚本
from googleapiclient.discovery import build from google.auth import default def get_group_members(group_key): # 定义Admin Directory API的只读组成员权限范围 SCOPES = ['https://www.googleapis.com/auth/admin.directory.group.member.readonly'] # 加载应用默认凭证(对应你执行的gcloud auth application-default login操作) credentials, _ = default(scopes=SCOPES) # 构建Directory API服务对象 service = build('admin', 'directory_v1', credentials=credentials) # 调用members.list接口,可按需添加参数 results = service.members().list( groupKey=group_key, includeDerivedMembership=True, maxResults=200, prettyPrint=True ).execute() members = results.get('members', []) return members # 替换为你的谷歌组邮箱并调用 group_members = get_group_members("xyx@myorg.com") for member in group_members: print(f"成员邮箱: {member['email']}, 成员类型: {member['type']}")
方案二:手动为requests添加授权凭证
如果坚持使用requests库,需手动加载gcloud生成的应用默认凭证,获取access token后附加到请求头。
步骤1:安装依赖库
pip install google-auth requests
步骤2:修改后的完整脚本
import requests from google.auth import default from google.auth.transport.requests import Request def make_request(group_key): # 定义API权限范围 SCOPES = ['https://www.googleapis.com/auth/admin.directory.group.member.readonly'] # 加载凭证并刷新获取有效access token credentials, _ = default(scopes=SCOPES) if not credentials.valid: credentials.refresh(Request()) # 构造请求URL、头信息和查询参数 url = f"https://admin.googleapis.com/admin/directory/v1/groups/{group_key}/members" headers = {'Authorization': f'Bearer {credentials.token}'} params = { 'includeDerivedMembership': 'true', 'maxResults': 200, 'prettyPrint': 'true' } # 发起请求并处理响应 response = requests.get(url, headers=headers, params=params) response.raise_for_status() print("请求成功,返回数据:") print(response.json()) return response.json() # 替换为你的谷歌组邮箱并调用 make_request("xyx@myorg.com")
额外注意事项
- 启用API:确保在GCP控制台中已启用Admin Directory API,否则会返回403或404错误。
- 账号权限:你登录的谷歌账号需拥有谷歌工作区管理员权限,或被明确授予读取谷歌组成员的权限。
- 凭证更新:若凭证过期,重新执行
gcloud auth application-default login即可刷新。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

