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

Google Classroom调用courseWork.list遇Scope变更警告及403权限错误怎么办

Google Classroom API:权限范围警告与403权限错误解决

问题分析

权限范围警告原因

调用service.courses().courseWork().list()时触发的范围变更警告,是因为该接口实际需要的权限是classroom.student-submissions.me.readonly,但你初始配置的是classroom.coursework.me.readonly。API会自动调整权限范围,但本地代码的权限声明未同步,因此出现警告。

403权限错误原因

换成推荐的classroom.student-submissions.me.readonly后出现403,是因为这个权限仅允许查看你自己的作业提交记录,而courses().courseWork().list()接口的作用是获取课程内的所有作业(非个人提交内容),两者权限不匹配:

  • 若你是学生身份,需要classroom.coursework.students.readonly权限才能查看课程作业列表;
  • 若你是教师身份,需要classroom.coursework.readonly或更高权限。

解决步骤

  1. 修正权限范围
    根据你的身份替换scopes列表:

    • 学生身份:
      scopes=[
          "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"
      ]
      
    • 教师身份:
      scopes=[
          "https://www.googleapis.com/auth/classroom.courses.readonly",
          "https://www.googleapis.com/auth/classroom.rosters.readonly",
          "https://www.googleapis.com/auth/classroom.coursework.readonly"
      ]
      
  2. 清除旧凭据
    修改权限后,删除之前授权生成的凭据文件(通常是token.json),重新运行代码完成授权,确保新权限生效。

  3. 修改后的完整代码示例

    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    import warnings
    
    # Set up the OAuth2 flow
    flow = InstalledAppFlow.from_client_secrets_file(
        'client_secret.json',
        scopes=[
            "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"  # 学生身份用这个,教师替换为classroom.coursework.readonly
        ])
    
    
    flow.run_local_server(port=0)
    
    # Get the OAuth2 credentials
    creds = flow.credentials
    
    # You can then use the credentials to authenticate requests to the Google API
    service = build('classroom', 'v1', credentials=creds)
    
    
    # Get a list of all the courses that you are a part of
    courses = service.courses().list().execute()
    
    # Loop through the courses and print the course names and IDs
    for course in courses['courses']:
        print(f"Course Name: {course['name']}")
        print(f"Course ID: {course['id']}")
    
        cw = service.courses().courseWork().list(courseId=course['id']).execute()
        
        for assig in cw['courseWork']:
            print(assig)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:46