使用服务帐户凭据通过https请求运行Google Apps脚本



我正在开发Flutter应用程序。我一直试图通过http请求运行我的web-app谷歌应用程序脚本,因为我需要使用服务帐户,而API应用程序脚本不支持该访问。但我不断收到403/禁止的回复。我有服务帐户的凭据,我在请求中使用了它的访问令牌,但它仍然不起作用。

我是http请求的新手,也是谷歌身份验证协议的新手,所以我希望能有一些见解。

提前谢谢。

代码:

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);

背景:脚本创建一个表单,并将其Destination设置为电子表格的ID。因此,该应用程序要求运行该表单的任何人都必须拥有谷歌帐户,才能成为新表单的所有者并访问该表单。

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

有人有什么想法吗?假设服务帐户是我的应用程序的正确谷歌凭据,我基本上需要以下能力:

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

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

相关内容

最新更新