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

使用服务账号获取Google Calendar资源列表提示未授权如何解决

问题1:使用了错误的API Scope

你当前使用的https://apps-apis.google.com/a/feeds/calendar/resource/是旧版日历资源API的Scope,适配当前调用的Directory API v1资源日历接口的Scope应为:

  • 只读权限:https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly
  • 读写权限:https://www.googleapis.com/auth/admin.directory.resource.calendar
    替换正确Scope后需要重新在Google Admin控制台的「API权限」页面对服务账号授予对应Scope的全域访问权限。

问题2:未配置服务账号的管理员身份模拟

Directory API的资源日历查询接口需要域管理员权限,服务账号本身没有对应权限,你需要在生成凭证时指定要模拟的域管理员账号,Ruby代码调整如下:

scope = 'https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly'
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open('path-to-service-account.json'),
  scope: scope,
  # 新增此行,填写你的域内拥有资源日历管理权限的管理员邮箱
  subject: 'admin@your-domain.com'
)
authorizer.fetch_access_token!

注意:使用该功能前必须先在Google Cloud控制台为对应服务账号开启「全域权限委托」开关。

问题3:请求参数和鉴权配置错误

  • key参数:该参数是未使用OAuth2鉴权时才需要传递的公开API密钥,你已经携带Authorization请求头的情况下,完全不需要传递key参数,该参数也和服务账号密钥ID没有任何关系。
  • access_token使用:接口返回的完整access_token直接填写到Authorization: Bearer 后即可,不需要省略任何字符,也不需要转换为JWT格式,你看到的省略号是输出时的截断内容,实际调用使用完整返回值即可。
  • CUSTOMER参数:不需要填写控制台获取的C开头字符串,直接填写固定值my_customer即可自动匹配当前服务账号所属的域,降低参数填写错误概率。

内容的提问来源于stack exchange,提问作者Tomasz Cieńciała

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:57:05