Authentication 当G-Suite用户访问G-Suite可信应用程序脚本时,如何避免脚本授权提示?

Authentication 当G-Suite用户访问G-Suite可信应用程序脚本时,如何避免脚本授权提示?,authentication,google-apps-script,google-workspace,Authentication,Google Apps Script,Google Workspace,我编写了一个应用程序脚本,它为团队日历中的数据输入提供了一个web UI。我使用G-Suite超级管理员帐户发布了它,并将其添加为安全/API权限下的受信任应用程序。在“内部应用程序设置”下选中“信任域拥有的应用程序” 当我们组织中的G-Suite用户尝试访问该应用程序时,他会看到 “ShiftSchedulingApp的开发者,admin@_our_organization_.org,需要您的许可才能在谷歌上访问您的数据。“ 那些敢于点击“查看权限”的人将被带到下一条消息: “ShiftSch

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

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

“ShiftSchedulingApp的开发者,admin@_our_organization_.org,需要您的许可才能在谷歌上访问您的数据。“

那些敢于点击“查看权限”的人将被带到下一条消息:

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

当然,没有人愿意冒着丢失谷歌账户上所有日历的风险,这就是它的结局

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

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

如果有任何提示能给我指明正确的方向,我将不胜感激


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

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


我尝试的另一个变体是让一个应用程序做所有事情并以我的身份运行,而另一个应用程序只做返回会话。getActiveUser()。我尝试通过XMLHttpRequest从客户端的第一个呼叫第二个。它非常适合我的需要——但我遇到了CORS错误,因为应用程序URL是script.google.com,但它实际上被重定向到script.googleusercontent.com。在Google应用程序脚本中似乎没有设置CORS的方法。

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

可能的解决方案:
  • 2个web应用程序-一个作为您运行,另一个作为用户访问(仅具有配置文件)权限。第二个将是实际的web界面,并以特权向第一个发布必要的信息。或

  • 实现您自己的web应用程序Google登录

  • 使用最小许可范围


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

我选择将应用程序发布为访问用户,因为我认为这是获取访问用户Id的唯一方法——这对于非G套件帐户是正确的

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


感谢Niek和校长的帮助

发布应用程序脚本时,请在“作为执行应用程序:”选项中为我(管理员用户)选择web应用程序。在这种情况下,脚本将作为管理员用户运行,因此管理员用户需要对应用程序进行身份验证,然后每个用户都可以自由使用该应用程序。缺点是,您无法访问用户的特定资源,如日历。这里有一些选项:1)在日历中创建事件作为管理员帐户。(最简单)2)模拟用户访问web应用。谢谢Niek!我不需要访问私人用户的日历,只需要访问共享的团队日历。但我需要知道用户是谁。除非应用程序发布时带有“以访问用户的身份执行应用程序”选项,否则我无法理解如何执行该操作。否则,Session.getActiveUser()将返回空白。你能详细说明一下“模拟用户访问web应用程序”吗?所有用户都在同一个g套件环境中吗?在这种情况下,您应该能够使用
urlFetch()
Niek从服务器读取活动user.Post,您是对的。即使应用程序以我的身份执行,我也可以访问活动用户!这100%解决了我的问题-没有授权提示,但我知道用户是谁。我希望这不是一个错误,它将保持这种方式。它不适用于非G-Suite帐户。谢谢谢谢校长!我需要写入共享的团队日历。我听从了你的建议,将范围缩小到(而不仅仅是日历),语言确实变得不那么可怕了。但它仍然询问用户是否信任该应用程序访问谷歌账户上所有日历上的所有事件,这让用户非常困惑。你对2个网络应用的建议似乎是个好主意!我会尝试一下,然后再报告。我尝试了两个应用程序的方法,请参阅原始帖子中的编辑。