.NET 5 Core API中运行超1年的Google Calendar v3突然失效原因问询
Google Calendar v3 API .NET 对接故障排查方案
常见故障原因
- 服务账号权限变更
Google Workspace 近期对服务账号域委派策略的校验更加严格,可能存在以下权限问题:- 你使用的服务账号的域-wide 委派权限被管理员撤销,或授予的 Scope 列表被调整,不再包含你用到的日历相关权限
- 代码中
CreateWithUser传入的是服务账号自身邮箱,如果要访问user@domain.com的日历,若未开启域委派,需要将服务账号单独加入该日历的共享列表;若已开启域委派,此处应该传入你要模拟的普通Workspace用户邮箱(即user@domain.com)而非服务账号邮箱 - Google Cloud 控制台中 Google Calendar API 被意外禁用,或接口请求配额已耗尽
- 凭证过期问题
服务账号密钥默认支持设置有效期,最长为2年,若你当初创建密钥时设置的是1年有效期,刚好符合你稳定运行1年后失效的特征,可进入Google Cloud控制台「IAM > 服务账号 > 密钥」页面,确认当前使用的密钥未过期、未被禁用。 - API 规则更新兼容问题
2024年以来Google Calendar API对请求参数的校验规则收紧:- 你同时使用了OAuth2服务账号授权和
Key = "API_KEY"参数,二者混用会触发权限校验冲突,OAuth授权场景下无需额外传入API密钥 TimeMin、TimeMax参数现在要求明确为UTC时间,你当前传入的DateTime.Now是本地时间,无明确时区标识,会被接口拒绝
- 你同时使用了OAuth2服务账号授权和
- 底层运行环境问题
.NET 5 已停止官方支持,若服务器近期有系统更新,可能导致默认TLS版本低于1.2,而Google API当前强制要求所有请求使用TLS 1.2及以上版本,你可以在代码初始化阶段添加配置强制指定TLS版本:
另外ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;GoogleCredential、CalendarService构建阶段不会发起网络请求,只有第一次执行接口调用时才会请求OAuth接口获取Access Token,因此构建无报错不代表凭证有效。
优先级最高的排查步骤
- 捕获接口请求的完整错误信息:在执行
ListRequest的Execute()/ExecuteAsync()方法时添加try-catch,捕获Google.GoogleApiException,读取异常内的Error.Code和Error.Message字段,可直接定位错误类型(401代表凭证无效、403代表权限不足、429代表配额超限等) - 移除ListRequest中的
Key = "API_KEY"参数,同时将TimeMin、TimeMax修改为UTC时间后重试 - 进入Google Workspace管理后台,确认服务账号的Client ID仍被授予了
Calendar、CalendarEvents、CalendarEventsReadonly三个Scope的访问权限
内容的提问来源于stack exchange,提问作者DuaneS
相关产品推荐
相关产品推荐

