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

Google Classroom API为网站端创建的作业评分的权限错误解决咨询

你遇到的@ProjectPermissionDenied报错原因判断正确:所有通过Google Classroom官方UI创建的作业默认绑定Google内部的Classroom服务项目,只有对应项目发起的修改请求才会被允许,第三方开发者项目默认没有修改权限。官方文档的「Try this API」功能使用的是Google官方的API Explorer项目,和UI创建作业的绑定项目不匹配,所以报相同错误是正常现象,不代表你的接口参数有问题。

以下是两种可行的解决方案,可根据你的账号类型选择:

方案1:适用于Google Workspace教育/企业域用户

  • 首先在你的开发者控制台项目中创建服务账号,开启全域权限委派功能
  • 联系你的域管理员在Google Admin后台,为该服务账号授权以下必要的API权限范围:
    • https://www.googleapis.com/auth/classroom.coursework.students
    • https://www.googleapis.com/auth/classroom.grades
  • 代码中使用服务账号模拟创建该作业的教师账号发起请求,即可绕过项目匹配限制完成评分,修改后的代码参考:
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/classroom.coursework.students', 'https://www.googleapis.com/auth/classroom.grades']
SERVICE_ACCOUNT_FILE = '你的服务账号密钥文件路径.json'
# 替换为创建作业的教师邮箱
IMPERSONATE_EMAIL = 'teacher@your-domain.com'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES).with_subject(IMPERSONATE_EMAIL)

# 初始化service后沿用你原有评分逻辑即可
studentSubmission = {
  'assignedGrade': 99,
  'draftGrade': 80
}
service.courses().courseWork().studentSubmissions().patch(
    courseId=<course ID or alias>,
    courseWorkId=<courseWork ID>,
    id=<studentSubmission ID>,
    updateMask='assignedGrade,draftGrade',
    body=studentSubmission).execute()

方案2:适用于个人Google账号用户

个人账号没有域管理员权限,无法使用全域委派功能,可采用变通方案实现需求:

  • 先在官方UI端完成作业的内容设计和测试,确认所有配置符合业务要求
  • 通过你的开发者项目调用Classroom API的courses.courseWork.create接口,复制UI端作业的全部配置创建完全相同的作业
  • 新创建的作业会绑定你自己的开发者项目,此时你就可以正常调用评分接口修改成绩

注意:两种方案都需要确保你发起请求的账号拥有对应课程的教师/助教权限,作业的评分功能已在课程设置中开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:27:04