如何创建Apps Script服务账户,以活跃用户身份访问Drive、Sheet、Docs?
核心逻辑梳理
你要实现的是「用户以自身身份运行Web App,脚本能访问用户无直接权限的Drive/Docs/Sheets资源」,核心思路是用服务账号作为“权限代理”:
- 服务账号拥有目标资源的访问权限(直接共享资源给服务账号邮箱即可);
- 用户的Web App脚本(以active user身份运行)通过OAuth2授权,调用服务账号的API操作资源;
- 用户全程无需直接接触资源,所有操作都通过脚本借助服务账号权限完成。
新手入门步骤
1. 创建服务账号
- 登录Google Cloud控制台,新建项目或使用现有项目;
- 进入「IAM与管理员」→「服务账号」,点击「创建服务账号」;
- 填写名称、描述后完成创建,记录服务账号的邮箱(后续用来共享资源);
- 给服务账号添加对应权限,比如「Drive文件编辑器」「Sheets编辑器」,按需选择最小权限即可。
2. 生成服务账号密钥
- 在服务账号详情页切换到「密钥」标签,点击「添加密钥」→「创建新密钥」;
- 选择JSON格式,下载密钥文件(务必妥善保存,脚本中需要用到)。
3. 配置Web App的OAuth2授权
- 在Google Apps Script中,进入「资源」→「库」,搜索OAuth2库的脚本ID:
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF并启用; - 将下载的JSON密钥内容复制到脚本的常量中(比如
const SERVICE_ACCOUNT_KEY = {...}); - 编写OAuth2授权代码,获取服务账号的访问令牌,用于调用Drive/Docs API;
- 发布Web App时,选择「执行权限:以访问该Web应用的用户身份运行」。
4. 实现资源访问逻辑
- 用获取到的服务账号令牌,调用Google Drive/Docs/Sheets的REST API(比如Drive的
files.get、Sheets的spreadsheets.values.get); - 所有资源操作都通过API完成,用户看不到原始资源链接,也无需直接权限。
关键注意事项
- 服务账号密钥要严格保密,绝不能暴露给普通用户;
- 遵循最小权限原则,只给服务账号分配必要的资源权限,避免过度授权;
- 测试阶段先在小范围用户中验证,确保权限逻辑和操作流程正常。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

