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

如何使用Google Python SDK/REST API列出服务账号的OAuth2权限范围?

列出服务账号的域级委派OAuth2权限范围

要查询已配置域级委派的服务账号所拥有的OAuth2权限范围,你需要借助Google Admin SDK Directory API——因为这些权限是在Google Workspace管理员控制台中分配的,服务账号本身无法直接返回自身的委派权限列表。以下是具体实现方式:

一、前提条件

  • 拥有Google Workspace域的管理员权限(仅管理员能读取域级委派配置)
  • 服务账号已完成域级委派配置,且你持有其完整凭据(JSON密钥文件、客户端ID等)
  • 已为服务账号授予https://www.googleapis.com/auth/admin.directory.domainsecurity权限(用于访问Admin SDK的域安全相关接口)

二、使用REST API实现

1. 获取模拟管理员的访问令牌

先通过服务账号模拟域内管理员身份,获取有效访问令牌:

# 用gcloud命令快速生成(也可通过代码实现)
gcloud auth application-default print-access-token --impersonate-service-account=admin@your-domain.com

2. 调用Admin SDK接口

发送GET请求到指定端点:

GET https://admin.googleapis.com/admin/directory/v1/customer/my_customer/domainwideDelegation/{YOUR_SERVICE_ACCOUNT_CLIENT_ID}
  • my_customer可直接替代你的域ID,无需手动查找
  • 将{YOUR_SERVICE_ACCOUNT_CLIENT_ID}替换为你的服务账号客户端ID

响应示例(简化版):

{
  "clientId": "123456789012345678901",
  "oauth2Scopes": [
    "https://www.googleapis.com/auth/admin.chrome.printers",
    "https://www.googleapis.com/auth/admin.chrome.printers.readonly"
  ]
}

其中oauth2Scopes字段就是该服务账号已分配的域级委派权限范围。


三、使用Python SDK实现

1. 安装依赖

pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib

2. 代码示例

from google.oauth2 import service_account
from googleapiclient.discovery import build

# 替换为你的服务账号密钥文件路径
SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-key.json'
# 替换为你的域管理员邮箱
ADMIN_EMAIL = 'admin@your-domain.com'
# 替换为你的服务账号客户端ID
SERVICE_ACCOUNT_CLIENT_ID = '123456789012345678901'

# 构建模拟管理员的凭据
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE,
    scopes=['https://www.googleapis.com/auth/admin.directory.domainsecurity'],
    subject=ADMIN_EMAIL
)

# 构建Admin SDK Directory服务
service = build('admin', 'directory_v1', credentials=credentials)

# 查询域级委派权限
result = service.customer().domainwideDelegations().get(
    customer='my_customer',
    clientId=SERVICE_ACCOUNT_CLIENT_ID
).execute()

# 输出权限范围
print("已分配的OAuth2权限范围:")
for scope in result.get('oauth2Scopes', []):
    print(f"- {scope}")

注意事项

  • 确保服务账号的域级委派配置中已包含admin.directory.domainsecurity权限,否则会返回权限不足的错误
  • 域级委派仅适用于Google Workspace/Cloud Identity客户,无对应订阅的域无法使用Admin SDK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:47