gpt4 book ai didi

authentication - 当有人以我身份运行 Google Apps Script Web 应用程序时获取用户信息

转载 作者:行者123 更新时间:2023-12-03 23:09:09 25 4
gpt4 key购买 nike

我有一个独立的 Google Apps 脚本部署为网络应用程序。该应用程序以我的身份执行,因为我希望它访问存储在我的云端硬盘上的文件,并且因为我希望它生成具有某些范围的 Google 表格文件,这些文件仍然可以由脚本编辑。但是,我希望这些文件被隔离到文件夹中,并且每个文件夹都分配给一个用户,所以我需要知道每次应用程序运行时用户是谁。

Session.getActiveUser().getEmail() 不起作用,因为 Web 应用程序是作为我而不是作为用户部署的。我的另一个想法是让应用程序“对所有人都可用,甚至是匿名的”(现在它只是“对所有人可用”)以跳过 Google 的登录屏幕,并使用某种第三方身份验证服务或脚本。构建我自己的似乎有点矫枉过正,因为它似乎应该已经存在,但到目前为止,我的研究只发现了像 Auth0 这样的东西,它似乎与我简单的基于 Google Apps 脚本的应用程序不兼容,否则我太缺乏经验而无法弄清楚如何使用它们。

有没有人对如何对这种网络应用程序的用户进行身份验证有什么建议?最好附带适合初学者的教程或文档?或者,是否有另一种方法可以让我找出谁在运行该应用程序,同时仍然以我自己的身份执行它?

我对此很陌生,我什至不确定我是否以正确的方式提出这个问题,因此我们非常感激地接受建议的编辑。

最佳答案

我可以想到两种方法,您可以在其中部署 Web 应用程序以在用户访问它时执行:

  • 场景A: Create a service-account访问存储在您的云端硬盘上的文件并生成 Google 表格。
  • 场景B: Create a separate Apps Script project deployed as an API Executable并从主 Web App 调用其函数。

  • 这些方法是可行的,但每种方法都有许多优点和缺点。

    两者都需要 OAuth2 身份验证,但由于 Eric Koleda's OAuth2 library,该位相当容易处理.

    此外,在这两种情况下,您都需要将主 Apps 脚本项目绑定(bind)/链接到 GCP 项目并启用适当的服务,在您的情况下为 Google Sheets 和 Google Drive API ( see documentation for more details)。

    对于 场景A ,服务帐号必须在同一个 GCP 项目下创建。对于 场景B ,API 可执行文件的辅助 Apps 脚本项目也必须绑定(bind)到同一个 GCP 项目。

    特定于场景 A 的问题

    您需要与服务帐户共享要访问/修改(和/或创建内容)的文件和文件夹。服务帐户有自己的电子邮件地址,您可以与它共享 google 驱动器文件/文件夹,就像与任何其他 gmail 帐户一样。

    对于新创建的内容,权限可能是一个问题,但幸运的是在文件夹下创建的文件继承了该文件夹的权限,因此您应该在这方面做得很好。

    但是,您必须直接将 REST API 用于 Drive 和 Sheets 服务;通过 UrlFetch 以及服务帐户的访问 token (使用 OAuth2 库生成)调用它们。

    特定于场景 B 的问题

    您需要设置一个单独的 Apps 脚本项目并构建一个可由第 3 方调用的公共(public) API(非私有(private)函数的集合)。

    将脚本绑定(bind)到与主 Web 应用程序相同的 GCP 项目后,您需要从 IAM(身份访问管理)面板下的 GCP 控制台生成额外的 OAuth2 凭据。

    您将使用客户端 ID 和客户端密码来生成特定于您的帐户的刷新 token (使用 OAuth2 库)。然后,您将在主 Web 应用程序中使用此刷新 token 为 API 可执行文件(也使用 OAuth2 库)生成必要的访问 token 。与前面的场景一样,您需要使用 UrlFetch 使用生成的访问 token 调用 API Executable 上的方法。

    需要注意的一点是,您不能在 API 可执行代码中使用触发器,因为它们是不允许的。

    显然,我已经忽略了很多细节,但这应该足以让你开始。

    祝你好运。

    关于authentication - 当有人以我身份运行 Google Apps Script Web 应用程序时获取用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59972996/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com