将身份验证从一个 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 游戏服务进行身份验证会导致错误
LightOpenID validate() 在 Google Apps 上失败
CentOS 使用 Google Authenticator 登录验证