使用google.auth Python无法登录,auth.valid为False且课程列表为空
问题解决方案
核心问题分析
auth.valid为False说明凭据未正确加载或完成授权,导致API调用缺乏有效权限,最终返回空结果。
具体修复步骤
1. 显式加载凭据并绑定权限范围
google.auth.default()不会自动关联你设置的环境变量凭据和自定义权限范围,需要手动加载凭据并指定scope:
import google.auth import os from googleapiclient.discovery import build from googleapiclient.errors import HttpError from google.oauth2 import service_account credentials_path = "./token.json" scopes = [ "https://www.googleapis.com/auth/classroom.courses.readonly", "https://www.googleapis.com/auth/classroom.courses" ] # 显式加载服务账号凭据并绑定权限范围 credentials = service_account.Credentials.from_service_account_file( credentials_path, scopes=scopes ) print(credentials.valid) # 此时应返回True try: service = build('classroom', 'v1', credentials=credentials) response = service.courses().list().execute() print("获取到的课程:", response.get('courses', [])) except HttpError as error: print(f"错误发生:{error}")
2. 检查服务账号权限配置
- 确认
token.json对应的服务账号已被添加到Google Workspace Classroom中,且被授予课程查看/管理的权限。 - 登录Google Admin控制台,在Classroom权限设置中,将服务账号邮箱添加为管理员或对应权限角色。
3. 验证凭据文件有效性
- 确认
token.json是从Google Cloud控制台正确下载的服务账号密钥,文件未损坏、内容无错误。 - 用
os.path.exists(credentials_path)验证脚本能否读取到该文件,路径是否正确。
4. 确认Classroom API已启用
- 登录Google Cloud控制台,搜索并确认Classroom API已启用,未启用会直接触发权限类错误。
内容的提问来源于stack exchange,提问作者Azazel
相关产品推荐
相关产品推荐

