如何使用 (Google) 身份验证保护 GAS 网站?

时间:2021-02-18 13:23:48

标签: google-apps-script google-cloud-platform

我已将工作 Google 应用程序脚本项目部署为 Web 应用程序。一切正常。

但是。我意识到我需要为每个用户个性化网站。我使用 Google 电子表格作为后端数据存储解决方案。我想要简单但安全的用户身份验证方式。我当然想到了 Google。

我正在使用 Legacy free edition of G Suite account(我是管理员)来运行我的网络应用程序。所以我使用这些设置部署了 Web 应用程序

  • 以访问网络应用的用户身份执行
  • 谁有权访问任何拥有 Google 帐户的人

现在我能够识别访问 Web 应用程序的用户 - 我从 Session.getActiveUser().getEmail(); 收到了他们的电子邮件,非常完美。然后我想将他们所有的“数据”保存在“他们自己的”电子表格中。当我使用 DriveApp.createFile(fileName, 'Hello, world!') 保存文件时,文件会保存在他们的 Google 光盘上。我希望所有应用程序数据都在我的光盘上。

所以我创建了一个新项目 - 库 - 并部署为库并将电子邮件传递给它,因为它将是文件名。如果我以我的身份访问网络 - 两个项目的所有者,它就会起作用。如果我以其他人身份访问网络,则会收到此错误 We're sorry, a server error occurred while reading from storage. Error code NOT_FOUND。我为此问题创建了另一个 SO question,实际上它看起来像是一个 bug

然后我将库部署为具有这些设置的 Web 应用程序

  • 像我一样执行
  • 谁可以访问任何人,我也尝试过任何拥有 Google 帐户的人

我确信我不是唯一一个在寻找如何为我的 GAS 网络创建某种身份验证之王的可行解决方案。

谁能建议您如何在您的网站上做到这一点?

1 个答案:

答案 0 :(得分:3)

有 3 种方法可以在您的 web 应用程序上对用户进行身份验证。

  1. 将 Google 登录集成到您的网络应用(推荐)

  2. 以访问 web 应用程序的用户身份执行并使用 Session.getActiveUser().getEmail(); 检索用户电子邮件 (它可以工作,但用户必须允许访问其帐户才能使用 web 应用程序和 GAS 项目限制数量可以访问的用户数)

  3. 制作您自己的登录表单,使用您自己的数据库验证用户,并使用 HTML/Javascript 存储令牌(因为 GAS 不允许您创建 cookie)(不推荐,它不是很安全)

我建议使用谷歌登录选项,但既然你说你认为它有点复杂,那么你可以使用第二个选项(以用户身份执行应用程序)以及创建文件的问题在您的谷歌光盘而不是用户光盘上,您有两个选项:

  1. 在您的 google 光盘上创建一个文件夹并将其设为公开或与使用您的 web 应用程序的帐户共享,然后更改您的代码以便在您的文件夹中创建文件。

    var myFolder = DriveApp.getFolderById('123'); myFolder.createFile(fileName, 'Hello, world!');

  2. 如果您不想共享该文件夹,请将其设为私有,然后创建第二个 webApp 来读取/写入您文件夹中的文件,然后将其发布为像我一样执行,然后使用 fetch(URL) 从第一个 webApp 调用第二个 webApp;方法。

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app