如何为service account授予权限以访问谷歌账号创建的Google Classroom数据
Google Classroom 服务账号访问权限配置步骤
1. 开启服务账号全域权限委托
- 仅谷歌Workspace组织账号支持该能力,如果你使用的是个人版谷歌账号,无法开启全域委托,直接跳至第4步改用OAuth 2.0授权码模式即可
- 进入Google Cloud控制台「IAM与Admin > 服务账号」页面,找到已创建的服务账号,进入「高级设置」板块,开启「启用Google Workspace全域权限委托」开关,保存后复制生成的服务账号客户端ID
2. Workspace后台配置API授权范围
- 进入Workspace管理后台,依次打开「安全性 > 访问权限和数据控制 > API控制 > 全域权限委托」,点击新增授权
- 输入上一步复制的服务账号客户端ID,在OAuth范围栏填入你需要的Classroom接口对应权限,常用读权限如下:
https://www.googleapis.com/auth/classroom.courses.readonly(课程只读)https://www.googleapis.com/auth/classroom.rosters.readonly(成员只读)https://www.googleapis.com/auth/classroom.coursework.students.readonly(作业只读)
- 保存配置后等待10~15分钟让权限全局生效
3. 代码端指定模拟用户
- 服务账号默认使用自身身份发起请求,无法访问你个人账号下的私有Classroom数据,需要在初始化认证客户端时,指定
subject参数为你创建Classroom的个人谷歌账号邮箱,Python示例如下:
from google.oauth2 import service_account # 替换为实际的权限列表、密钥文件路径、个人账号邮箱 SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly'] KEY_FILE_PATH = './service-account-key.json' TARGET_USER_EMAIL = '你的个人谷歌账号邮箱@gmail.com' credentials = service_account.Credentials.from_service_account_file( KEY_FILE_PATH, scopes=SCOPES, subject=TARGET_USER_EMAIL )
- 用生成的credentials初始化Classroom SDK客户端即可发起接口请求
4. 个人谷歌账号适配方案
- 如果你使用的是无Workspace组织的个人谷歌账号,无法使用服务账号全域委托能力,直接改用OAuth 2.0授权码模式,在请求授权时选择你创建Classroom的个人谷歌账号同意授权,拿到access token后即可访问对应数据
内容的提问来源于stack exchange,提问作者Денис Ничипорчик
相关产品推荐
相关产品推荐

