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

如何允许服务账号及普通账号获取Classroom域名下全部课程列表?

Google Classroom 域级课程列表权限配置问题解答

问题1:如何允许服务账号获取Classroom域名下的完整课程列表?

  • 启用Classroom API:在关联服务账号的Google Cloud项目中,搜索并启用Classroom API。
  • 配置域范围委派:以Google Admin超级管理员身份进入Admin控制台,依次打开「安全」>「API控件」>「域范围委派」,添加服务账号的客户端ID,授权以下OAuth范围:
    • https://www.googleapis.com/auth/classroom.courses.readonly(推荐,遵循最小权限原则)
    • 若需后续修改课程可使用https://www.googleapis.com/auth/classroom.courses,但只读权限已满足列表获取需求。
  • 绑定域内课程查看权限:在Admin控制台的「Classroom」>「课程设置」中,为服务账号授予「查看所有课程」的权限;或在Google Cloud项目IAM中,给服务账号添加Classroom Viewer角色。
  • 调用API获取列表:使用服务账号密钥完成身份验证,调用courses.list接口并指定domain参数。示例代码片段:
    from google.oauth2 import service_account
    from googleapiclient.discovery import build
    
    SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly']
    SERVICE_ACCOUNT_FILE = 'service-account-key.json'
    
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    # 可选:模拟管理员视角,需确保服务账号已完成域委派
    delegated_credentials = credentials.with_subject('admin@yourdomain.com')
    
    service = build('classroom', 'v1', credentials=delegated_credentials)
    results = service.courses().list(domain='yourdomain.com', pageSize=100).execute()
    courses = results.get('courses', [])
    

问题2:普通账号无需超级管理员权限获取域内全课程列表的可行方案

有两种实用方案,按需选择:

方案1:自定义管理员角色(面向普通用户账号)

  1. 在Google Admin控制台进入「角色和权限」>「创建角色」,命名为「Classroom全课程查看者」。
  2. 在权限列表中找到「Classroom」分类,勾选查看域内所有课程权限,不勾选其他管理员权限项。
  3. 将目标普通账号添加至该自定义角色,账号即可通过Classroom界面或API调用获取域内所有课程,仅拥有只读权限。

方案2:服务账号代理(面向自动化/程序场景)

使用已配置好域级权限的服务账号(参考问题1的配置),让普通账号通过调用该服务账号的API接口获取课程数据,无需直接给普通账号授予域级权限;或在Google Cloud项目中给普通账号添加调用服务账号的权限,允许其触发服务账号的API请求。

关键注意事项

  • 始终遵循最小权限原则,仅授予必要的只读权限,避免过度授权。
  • API调用时,确保请求的OAuth范围为courses.readonly,防止意外修改课程数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:17