【问题标题】:Running Google Apps Script through https request with Service Account credentials使用服务帐户凭据通过 https 请求运行 Google Apps 脚本
【发布时间】:2021-01-09 18:08:54
【问题描述】:

我正在开发一个 Flutter 应用程序。而且我一直在尝试通过 http 请求运行我的网络应用程序 Google Apps 脚本,因为我需要使用服务帐户并且 Apps Script API 不支持该访问。但我不断收到对请求的 403/Forbidden 响应。我有服务帐户的凭据,并且在我的请求中使用了它的访问令牌,但它仍然不起作用。

我是 http 请求的新手,并且是 Google 身份验证协议的新手,因此我希望能得到一些见解。

提前致谢。

代码:

    return await driveUtils.getCreds(context).then((creds) async {
      final drive_scopes = [drive.DriveApi.DriveReadonlyScope, "https://www.googleapis.com/auth/drive.file"];
      final script_scopes = [app_scripts.ScriptApi.ScriptDeploymentsScope];
      return await clientViaServiceAccount(creds, script_scopes+drive_scopes).then((AuthClient client) async {
        debugPrint("url = " + url);
        debugPrint("token = " + client.credentials.accessToken.data);
        return await client.get(url,
          headers: {
            "Authorization": "Bearer ${client.credentials.accessToken.data}"
          }
        );

      }, onError: onClientError);
    }, onError: onCredsError);

背景:该脚本创建一个表单并将其目标设置为电子表格的 ID。因此,该应用程序要求运行它的任何人都必须拥有 Google 帐户才能成为新表单的所有者并获得对工作表的访问权限。

更新:似乎服务帐户只能访问同一 Google Cloud 项目中的脚本。这是一个大问题,因为脚本的目的是为我的应用程序获取表单创建功能创建一个中心位置。该应用程序旨在供任何人使用。

有人有什么想法吗?假设服务帐户是适合我的应用的 Google 凭据,我基本上需要能够:

  1. 创建可以分配给用户的表单
  2. 将用户的电子表格指定为表单响应位置
  3. 检索表单发布的URL

【问题讨论】:

  • 很遗憾,Apps Script API 不适用于服务帐户。 Ref 那么,如果您想运行 Google Apps 脚本,那么使用 Web Apps 怎么样? Ref 在这种情况下,Google Apps Script 的功能可以通过 HTML 请求运行。此外,服务帐户的访问令牌可用于 Web 应用程序的授权。如果这不是您期望的方向,我很抱歉。
  • @Tanaike 我都试过了。我当前的问题是,如果我通过服务帐户访问令牌访问 WebApp。我不断收到 403 响应。我目前的印象是服务帐户只能访问 GCP 中的 WebApp。你知道吗?
  • 感谢您的回复。来自My current issue is that if I getting to the WebApp by means of a service account access token. I keep getting a 403 response,我无法了解您的脚本和Web 应用程序设置以及客户端脚本的详细信息。这是因为我的技术不好。我为此道歉。关于`我目前的印象是服务帐户只能访问GCP中的WebApps。`,我无法理解。可以问一下具体情况吗?
  • 顺便提一下,Web Apps脚本修改后,请重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 感谢您的回复。在您的情况下,请创建新的 Google Apps 脚本项目并放置简单的脚本并再次测试。因为我认为由于您现有的脚本,您的脚本已经使用了多个范围。在您确认使用简单脚本的测试有效后,请使用您的脚本进行下一步。在这种情况下,虽然我不确定您的实际脚本,但可能需要添加特定范围。请注意这一点。

标签: flutter google-apps-script http-status-code-403 service-accounts


【解决方案1】:

@Tanaike 帮助我解决了这个问题。为了使脚本可见并能够使用服务帐户运行,我必须更改共享设置以查看脚本。简单的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多