通过Service Account调用Google Calendar API如何为非Workspace谷歌账号创建日历事件
是否可以直接将普通谷歌账号传入createDelegated()
不可以。Google Workspace的全域委派权限仅对您所属组织下的Workspace账号生效,createDelegated()仅支持传入您所在域内的已注册账号,普通@Gmail.com账号不属于您的组织管理范围,调用时自然会返回400权限错误。
您当前可用的实现方案分两种场景,对应不同的配置要求:
场景1:仅需要将普通谷歌账号添加为事件参会人
无需修改现有服务账号的认证逻辑,保持原有代码不变:
GoogleCredentials googleCredentials = GoogleCredentials .fromStream(new FileInputStream(CREDENTIALS_FILE_PATH)).createScoped(SCOPES) .createDelegated("abc@myworkspace.com");
调用Calendar API创建事件时,在attendees参数中添加def@gmail.com即可,事件会自动发送邀请到对方的谷歌日历,对方接受后就会同步显示在对方的日历列表中,事件创建者仍然显示为abc@myworkspace.com。
场景2:需要直接在普通谷歌账号的私有日历中创建事件(创建者显示为对方账号)
该场景无法使用服务账号全域委派的方式实现,需要调整授权逻辑,您当前遗漏的配置环节如下:
- 首先修改OAuth同意屏幕配置:当前Internal类型的应用仅允许您所在Workspace域内的账号访问,需要改为External类型。如果仅给少量指定账号使用,可选择测试状态,手动把需要授权的普通谷歌账号添加到测试用户列表;如果要公开给所有用户使用,需要完成应用的正式发布审核。
- 为应用配置Calendar API对应的授权作用域,根据使用需求选择
https://www.googleapis.com/auth/calendar或更小粒度的作用域。 - 替换原有服务账号认证逻辑,改用OAuth 2.0授权码模式,引导需要创建事件的普通谷歌账号完成授权,拿到授权凭据后再调用Calendar API接口创建事件即可。
内容的提问来源于stack exchange,提问作者TheSagya
相关产品推荐
相关产品推荐

