开发者问题收集

G-Suite 用户访问 G-Suite 信任的应用程序脚本时如何避免脚本授权提示?

2019-02-07
1144

我编写了一个应用脚本,它提供了一个用于将数据输入团队日历的 Web UI。我使用 G-Suite 超级管理员帐户发布了它,并将其添加为安全/API 权限下的受信任应用。在“内部应用设置”下选中了“信任域拥有的应用”。

当我们组织中的 G-Suite 用户尝试访问该应用时,他会看到

“ShiftSchedulingApp 的开发人员 admin@_our_organization_.org 需要您的许可才能访问您在 Google 上的数据。”

那些勇敢地点击“查看权限”的人会看到下一条消息:

“ShiftSchedulingApp 想要访问您的 Google 帐户。查看、编辑、共享和永久删除您可以使用 Google 日历访问的所有日历”

当然,没有人愿意冒险丢失他们 Google 帐户上的所有日历,这就是结局。

如何摆脱这个误导性的消息?这不是 Google 帐户,而是他们在 G-Suite 上的组织帐户。这不是他们所有的日历,而只是共享的团队日历。它正在添加数据,而不是永久删除日历。它是由他们的管理员在他们的 G-Suite 中发布的,而不是未知的第三方。

我花了几天时间试图让这条消息消失,但没有成功。应用程序必须作为访问用户执行,而不是作为发布用户执行,因为他们的用户 ID 决定了他们可以在日历上填写哪些班次。

我很感激任何为我指明正确方向的提示。


我按照建议尝试了双应用程序方法的变体。

提供 UI 的应用程序需要读取日历以显示可用的班次 - 因此我无法摆脱用户授权提示。

我尝试的另一种变化是让一个应用程序做所有事情并以我的身份运行,另一个应用程序什么也不做,只是返回 Session.getActiveUser()。我尝试在客户端通过 XMLHttpRequest 从第一个调用第二个。这对于我的需求来说是理想的 - 但我遇到了 CORS 错误,因为应用程序 URL 是 script.google.com,但它实际上被重定向到 script.googleusercontent.com。似乎没有办法在 Google App Script 中设置 CORS。

2个回答

虽然我无法找到一种方法来避免在以访问用户身份执行应用程序时提示用户授权,但事实证明我这样做的原因是基于错误的前提。

我选择以访问用户身份发布应用程序,因为我认为这是获取访问用户 ID 的唯一方法 - 对于非 G Suite 帐户而言确实如此。

但是,当应用程序由 G Suite 帐户发布时,即使将其设置为以发布用户身份执行,该应用程序也可以在同一个 G Suite 域内获取访问用户 ID。

感谢 Niek 和 TheMaster 的帮助!

Aud
2019-02-10

如果您只需要 用户 ID ,为什么还要请求所有这些权限?

可能的解决方案:

  • 2 个 Web 应用程序 - 一个以您的身份运行,另一个以用户访问(仅具有配置文件)权限运行。第二个将是实际的 Web 界面,并以特权将必要的信息发布到第一个。或

  • 实现您自己的网络应用 Google 登录 1

  • 使用最不宽松的 2 范围 3

TheMaster
2019-02-07