【问题标题】:Adding external Google APIs to add-on initial auth scopes将外部 Google API 添加到附加初始身份验证范围
【发布时间】:2026-01-17 05:50:01
【问题描述】:

我构建了一个 Google 表格插件,它从 Google Search Console API 检索数据并将其写入用户的电子表格。

由于 Apps 脚本的“高级 Google 服务”部分中没有 Search Console API,因此我使用了 GitHub 上的 OAuth2 library,范围为“https://www.googleapis.com/auth/webmasters.readonly”。它目前在开发者控制台中使用单独的凭据。

虽然插件运行良好,但当用户第一次安装它时,他/她必须使用 Google 的 OAuth 流程对脚本中自动检测到的某些范围进行授权(管理电子表格、发送电子邮件、做外部请求,等等)。授权完成后,插件会显示通常的插件侧边栏,用户必须在其中执行额外的 OAuth 过程,这次是为了批准对 Search Console API 的访问(通过 OAuth2 库前面提到过)。

我的目标是在初始 OAuth 流程中包含 Search Console 范围,这样用户就无需经历两次该流程。不幸的是,Apps Script Project Properties 中的“Scopes”部分不可编辑,所以我无法手动添加它,据我所知,没有办法让它被自动检测到。

有没有办法做到这一点?如果我要使用我用来访问 Search Console API 的 OAuth2 库的 Apps 脚本凭据(而不是单独设置),会有什么不同吗?

谢谢!

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    正如documentation 中所述,Google Apps 脚本可以与来自整个网络的 API 进行交互。本指南展示了如何在脚本中使用不同类型的 API。您可以使用UrlFetch服务直接发出API请求。

    使用 OAuth 向服务发出请求

    代表用户操作的 API 通常需要授权,通常使用 OAuth protocol。 Apps 脚本不提供对该协议的内置支持,但您可以使用一些开源库来执行 OAuth 流程并将凭据与您的请求一起发送:

    这个link 也可能有帮助:

    直接发出 HTTP 请求

    如果外部应用程序需要 Google 身份验证,或者此库中还没有 Google API,则可以直接发出 HTTP 请求。

    authorize 方法返回一个授权的Guzzle Client,因此任何使用客户端发出的请求都会包含相应的授权。

    【讨论】:

    • 谢谢,但这并不能回答我的问题。我已经使用 Apps Script 的 OAuth2 库连接到 API,我只需要一种将范围集成到 Apps Script 项目范围内的方法,这样用户只需要验证一次(安装插件时),而不是两次。
    【解决方案2】:

    现在可以通过编辑清单文件来自定义项目的 OAuth 列表:https://developers.google.com/apps-script/concepts/scopes

    Google 提到并非所有的 Google OAuth 范围都包括在内(我还没有找到确切的列表),但我已经测试了添加 Google Search Console 范围,它似乎工作正常。

    【讨论】: