如何使用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
相关产品推荐
相关产品推荐

