Google 服务授权

Apps 脚本需要用户授权才能访问内置 Google 服务高级 Google 服务中的私密数据。

Google 服务的授权方式

当脚本需要访问 Google 服务时,它会遵循以下一般流程:

  1. 检测:Apps 脚本会扫描脚本,以确定其使用的服务(例如 SpreadsheetAppGmailApp)。
  2. 范围确定:根据扫描结果,Apps 脚本会确定脚本运行所需的一组 OAuth 范围
  3. 授权检查:脚本运行时,会检查用户是否已授权这些范围。
  4. 用户提示:如果缺少授权,系统会显示一个对话框,要求用户授予权限。
  5. 执行:获得脚本授权后,该脚本便可访问相应用户的所请求数据。

权限和脚本类型

脚本运行所用的用户身份(以及脚本可访问的数据)因脚本运行的场景而异,如下表所示。

脚本类型 脚本运行身份...
独立型插件 与 Google 文档、表格、幻灯片或表单绑定的脚本 使用键盘的用户
电子表格中的自定义函数 匿名用户;但是,配额限制 会针对键盘前的用户进行统计
Web 应用Google 协作平台信息块 键盘用户或脚本所有者,具体取决于部署应用时选择的选项
可安装的触发器 创建触发器的用户

授予访问权限

Apps 脚本会根据代码扫描结果自动确定授权范围(例如访问您的 Google 表格文件或 Gmail)。被注释掉的代码仍可生成授权请求。如果脚本需要授权,那么在运行该脚本时,您会看到此处显示的某个授权对话框。

如果代码更改添加了新服务,您之前授权的脚本也会要求您提供额外的授权。如果您以在脚本所有者的用户身份下运行的 Web 应用的形式访问脚本,则脚本可能不会请求授权。

撤消访问权限

如需撤消脚本对您数据的访问权限,请按以下步骤操作:

  1. 访问 Google 账号的权限页面。(如需日后前往此页面,请访问 Google.com,然后点击屏幕右上角的账号照片。接下来,依次点击我的账号、“登录和安全”部分下的关联的应用和网站,然后点击管理应用。)
  2. 点击要撤消授权的脚本的名称,然后点击右侧的移除,接着在显示的对话框中点击确定

将范围限制为当前文档

如果您要构建使用电子表格服务文档服务幻灯片服务表单服务插件或其他脚本,则可以强制授权对话框仅请求访问使用该插件或脚本的文件,而不是用户的所有电子表格、文档或表单。为此,请在文件级注释中添加以下 JsDoc 注释:

/**
 * @OnlyCurrentDoc
 */

如果您的脚本包含声明了 @OnlyCurrentDoc,但主脚本实际上需要访问的不仅仅是当前文件,则可以使用相反的注释 @NotOnlyCurrentDoc

插件的授权生命周期

Google 表格、Google 文档、Google 幻灯片和 Google 表单的插件通常遵循与绑定到文档的脚本相同的授权模型。不过,在某些情况下,它们的 onOpen(e)onEdit(e) 函数会在无授权模式下运行,这会带来一些额外的复杂情况。如需了解详情,请参阅插件授权生命周期指南

OAuth 应用用户数上限

使用 OAuth 访问 Google 用户数据的应用(包括 Apps 脚本项目)会受到授权限制。如需了解详情,请参阅 OAuth 应用用户限制

使用 Apps 脚本时的重新验证行为

Apps 脚本不会强制执行您在 Google Cloud 服务设置中配置的重新身份验证频率。这是因为 Apps 脚本可以使用触发器自动运行,而触发器无需直接的用户互动即可运行。这些自动执行不会触发重新身份验证提示。在您指定的时间段(例如 12 小时)过后,您的 Apps 脚本应用不会自动要求您重新进行身份验证。

在清单中设置明确的范围

Apps 脚本会扫描代码中的函数调用,自动确定所需的范围。如果您需要更多控制权,可以在项目清单 (appsscript.json) 中明确设置范围。建议您为已发布的脚本执行此操作,以确保您使用的是所需的最低权限。

如需了解相关说明,请参阅设置明确的范围

问题排查

  • 运行触发器时出现“需要授权”错误:触发器必须由创建它们的用户授权。如果您添加的代码需要新的权限,则必须在脚本编辑器中手动运行一次函数,以触发授权对话框。
  • 范围未更新:如果您已更新代码,但授权对话框未反映相应更改,请尝试保存项目并刷新编辑器。如果您在清单中使用显式范围,请确保已将新范围添加到 oauthScopes 数组。
  • “此应用已被屏蔽”或未经验证的应用警告:如果您的脚本使用敏感或受限范围,但尚未经过 Google 验证,就会出现此问题。请参阅 OAuth 客户端验证