尝试使用 Python 访问目录 api 时,服务帐户无权访问此资源/api

hil*_*rat 3 google-directory-api google-cloud-platform google-workspace

我们使用 Python 从特定 G Suite 托管域中获取所有用户,但在完成以下教程并授予服务帐户所需的所有访问权限后,以下代码段仍会生成“未授权访问此资源/api:

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

SCOPES = ['https://www.googleapis.com/auth/admin.directory.user.readonly']

credentials = service_account.Credentials.from_service_account_file("/path/to/file.json", scopes=SCOPES)

service = build('admin', 'directory_v1', credentials=credentials)
Run Code Online (Sandbox Code Playgroud)

hil*_*rat 6

谷歌文档中有一个(非常模糊的)解决方案的线索:

注意:只有有权访问 Admin API 的用户才能访问 Admin SDK Directory API,因此您的服务帐户需要模拟这些用户之一来访问 Admin SDK Directory API。此外,用户必须至少登录一次并接受 G Suite 服务条款。

在 Python 中实现模拟的方法是在使用 OAuth2 库进行身份验证时发送“主题”。主题应该是有权访问 Admin API 的用户(他不必是管理员,用户管理角色应该足够了,至少对于我的需要)。

一个工作片段:

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

SCOPES = ['https://www.googleapis.com/auth/admin.directory.user.readonly']

credentials = service_account.Credentials.from_service_account_file("/path/to/file.json", scopes=SCOPES, subject="admin@yourdomain.com")
Run Code Online (Sandbox Code Playgroud)