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

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,那就是权限范围不够。

  • 更新授权范围并重新获取令牌

    1. 检查Google Cloud Console中你的OAuth客户端ID的授权范围,确保添加了https://www.googleapis.com/auth/calendar.readonly(或更高权限)
    2. 强制用户重新授权:在Chrome设置→隐私和安全→网站设置→权限→日历中找到你的扩展并移除权限,重新启动扩展触发授权流程。
  • 检查令牌的有效性与刷新机制
    如果你的令牌是过期后自动刷新的,刷新后的令牌可能未包含新增的权限范围,需要重新触发授权流程获取带新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:43:12