我正在做一个我继承的项目,通过一个用Google Script编写的工作空间插件为Google Docs添加一些功能。附加组件向独立的web应用程序发出API请求。web应用程序需要访问一些用户的谷歌数据(例如Gmail),有时当用户离线时。
我让服务器访问Google数据的方式是使用apps-script-oauth2启动一个身份验证工作流,以https://accounts.google.com/o/oauth2/auth为基础,并使用服务器需要的所有与Google相关的作用域对其进行配置。(我知道这个图书馆是为"非谷歌"用户这么说的;OAuth,但这是在我开始项目之前构建的,我不知道有什么更好的方法。一旦我得到一个id_token和一个refresh_token,我将其发送到我们的服务器,并将加密的刷新令牌存储在数据库中。当测试工作正常时,附加组件开始安装,但随后询问我们的服务器当前用户是否存在;如果他们不这样做,用户只是启动AUTH流。
然而,当在市场上上市时,用户被要求确认他们需要的所有范围两次:一次是在安装附加组件时,然后是在创建与我们的服务器通信所需的服务时。更令人困惑/警告的是,第二个OAuth确认屏幕特别提到某些范围已经被授予同一个应用程序。
我的问题基本上是什么是正确的方式来处理这个问题。我意识到我可以使用ScriptApp类获得已经授予的OAuth令牌,但如果这没有与之关联的刷新令牌,那么稍后给我们的服务器访问是有问题的。我认为你的流程是正确的。你只需要向用户解释你为什么第二次请求授权。我不知道你的设置是什么,但它可能是这样的。
-
首先,用户安装插件,给脚本授权。
-
接下来是类似于"设置离线"访问按钮,或菜单项,或侧边栏,它们不会自动运行,但可能会在一些用户交互中运行。
如果没有它,脚本什么也做不了,你可以这样做——如果user是新用户,它只会看到一个带有"Authorize"的简单表单。按钮和说明,说明用户必须授权SERVER进入他的账户。这对用户来说是有意义的,所以它不会很奇怪。
当然,已经在第二屏幕上授予权限看起来很奇怪,但你可以这样解释:"我们需要更多的权限才能离线管理你的帐户。"请在以下屏幕上批核。
简而言之:
- 在两个验证屏幕之间暂停;
- 让第二个用户交互运行
- 解释为什么需要二次认证
- 删除对话框(按钮)验证后,它是好的