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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33