将身份验证从一个 Google Apps Script webapp 传递到另一个 Google Apps Script webapp

Posted

技术标签:

【中文标题】将身份验证从一个 Google Apps Script webapp 传递到另一个 Google Apps Script webapp【英文标题】:Passing authentication from one Google Apps Script webapp to another Google Apps Script webapp 【发布时间】:2014-07-08 06:09:31 【问题描述】:

我的 Google Apps 帐户中有两个 Google Apps 脚本。两者都已发布为具有以下设置的 web 应用程序。

脚本 A:

像我一样执行 谁有权访问网络应用程序:XXXXXXX.com 内的任何人

脚本 B:

以访问应用程序的用户身份执行 谁有权访问网络应用程序:XXXXXXX.com 内的任何人

我想让脚本 B 使用 UrlFetchApp 来执行脚本 A。如何将脚本 B 验证到脚本 A?

注意:

脚本 A 用于从只有我有权访问的电子表格中获取\写入数据。由于我的 Google Apps 域管理员 不允许域外共享,我无法设置对网络应用的匿名访问。

【问题讨论】:

【参考方案1】:

我想让脚本 B 使用 UrlFetchApp 来执行脚本 A。如何将脚本 B 验证到脚本 A?

即使脚本 A 设置为允许任何人访问它,我们的目标是保护它,以便只有脚本 B 能够发出有效请求。这可以使用脚本 A 和脚本 B 都可以访问的共享密钥轻松完成。当脚本 B 向脚本 A 发出请求时,它只需要包含密钥即可。脚本 A 可以拒绝任何不包含密钥的请求。

只有能够查看脚本 A 或脚本 B 的源代码的人才能找到密钥。当然,任何获得秘钥的人都可以冒充脚本B。

作为进一步的增强,您可以使用Utilities.computeHmacSha256Signature() 方法来避免将密钥作为请求的一部分发送。两个脚本仍然需要知道密钥,但您可以让脚本 B 计算 签名 并将其作为请求的一部分而不是密钥本身发送。

【讨论】:

【参考方案2】:

没有匿名访问是不可能的。 您可以假装自己是浏览器,即查看您的浏览器在您运行 web 应用程序时发送的内容并发送相同的标头/cookie 等,但这并不是真正受支持的方式。

【讨论】:

感谢 Zig 的洞察力。还有其他方法可以实现我的目标吗?我试图允许我域中的一些用户从只有我有权访问的电子表格中读取\写入一些信息。脚本 B 的目的是收集用户的电子邮件地址 有一些方法,但存在安全问题或其他问题。这个想法是让脚本 A 在 1 分钟的计时器上运行,并检查是否有东西要附加到你的 ss。我所说的东西是指与团队共享的另一个“队列”电子表格。缺点是用户如果好奇,就会看到并修改队列。为了解决这个问题,您可以将队列存储在其他地方,但请注意 scriptDb 已弃用。 您还可以使用硬编码令牌手动调用驱动器 API(使用 urlfetch 和 http 驱动器 API)。确保用户看不到脚本。 我对你提到的第二种方法很感兴趣。我必须使用驱动器 api 来写入电子表格吗?

以上是关于将身份验证从一个 Google Apps Script webapp 传递到另一个 Google Apps Script webapp的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Apps 帐户登录时,在 Android 上对 Google Play 游戏服务进行身份验证会导致错误

强制使用 Google Apps 域对外部网站进行身份验证

LightOpenID validate() 在 Google Apps 上失败

CentOS 使用 Google Authenticator 登录验证

从 Google App Engine 设置 Google Talk 状态(带身份验证)

google-apps 域验证异常的 Codeigniter .htaccess 文件配置