Chrome扩展调用Google Calendar API获取日历列表时出现403错误
排查Google Calendar API获取日历列表403错误的思路
核心差异:权限范围的精准性
能获取主日历事件却拿不到日历列表,最大可能是OAuth令牌的权限范围不匹配:
- 获取
primary日历事件仅需要https://www.googleapis.com/auth/calendar.events.readonly(甚至更窄的范围) - 但调用
calendarList.list接口需要更宽泛的日历读取权限:https://www.googleapis.com/auth/calendar.readonly或者https://www.googleapis.com/auth/calendar(读写权限)
具体排查步骤
验证令牌实际包含的权限范围
把你的OAuth令牌放到以下接口查询(直接在浏览器地址栏访问):https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=YOUR_TOKEN查看返回的
scope字段,确认是否包含calendar.readonly或calendar。如果只有calendar.events.readonly,那就是权限范围不够。更新授权范围并重新获取令牌
- 检查Google Cloud Console中你的OAuth客户端ID的授权范围,确保添加了
https://www.googleapis.com/auth/calendar.readonly(或更高权限) - 强制用户重新授权:在Chrome设置→隐私和安全→网站设置→权限→日历中找到你的扩展并移除权限,重新启动扩展触发授权流程。
- 检查Google Cloud Console中你的OAuth客户端ID的授权范围,确保添加了
检查令牌的有效性与刷新机制
如果你的令牌是过期后自动刷新的,刷新后的令牌可能未包含新增的权限范围,需要重新触发授权流程获取带新scope的令牌。排查OAuth同意屏幕的限制
如果你的扩展处于「测试」状态,确认测试用户列表里包含当前登录的Google账号,否则可能出现权限限制。
代码层面的优化建议
在fetchCalendars函数中,建议捕获更详细的错误信息,精准定位API返回的具体问题:
.then(response => { console.log('Response Status:', response.status); if (!response.ok) { return response.json().then(errData => { throw new Error(`Failed to fetch calendar list: ${errData.error.message}, code: ${errData.error.code}`); }); } return response.json(); })
内容的提问来源于stack exchange,提问作者Tom Bar-Gal
相关产品推荐
相关产品推荐

