如何缩小谷歌应用脚​​本的身份验证/驱动器范围?

时间:2017-10-13 12:01:24

标签: google-apps-script google-console-developer

我已经构建了一个谷歌应用脚​​本Web应用程序。对于与Google云端硬盘相关的功能,该应用需要auth/drive.install(与驱动器用户界面集成)和auth/drive.file(用于存储与相关文件属性中的文件关联的一些数据)范围。其他范围包括auth/urlshortenerauth/userinfo.emailauth/userinfo.profile。据我所知,后两者是auth目的所必需的。

以上范围是在app中的oauth dance中指定的。但是,在应用安装时,会向用户显示以下范围:

  • 查看和管理Google云端硬盘中的文件(与auth/drive scope对应)
  • 管理您的goo.gl短网址(auth/urlshortener
  • 以及与auth/script_*范围
  • 对应的其他三个

这与脚本属性的范围相关。

5 OAuth Scopes required by the script:

https: //www.googleapis.com/auth/drive
https: //www.googleapis.com/auth/script.external_request 
https: //www.googleapis.com/auth/script.scriptapp 
https: //www.googleapis.com/auth/script.storage 
https: //www.googleapis.com/auth/urlshortener

显然,使用高级Google服务会添加auth/driveauth/urlshortner,这些都在GAS IDE(资源>高级Google服务)和开发者控制台中启用

GAS IDE不允许指定任何比例如更窄的范围。 auth/drive。 开发人员控制台中的Google Apps Marketplace SDK配置不允许因某种原因添加任何特定范围。实际上,它允许添加但不保存任何内容。

问题:

最近,Google为OAuth客户端引入了一个审核程序,请求敏感的OAuth范围,auth/drive绝对是其中之一。

我不需要整个auth/drive范围,也不希望用户看到这样的内容: This app ins't verified

有没有办法通过GAS IDE或开发者控制台缩小drive范围?

脚本本身并未使用任何auth/script_*功能。由于我使用节点谷歌应用程序脚本模块进行开发,因此以某种方式隐式添加了这些。我不需要用户的许可。如何摆脱它?

有任何解决方法吗?

2 个答案:

答案 0 :(得分:3)

我自己应对这个问题。

我发现Google提供的以下参考资料很有帮助 https://developers.google.com/apps-script/concepts/scopes(“设置显式范围”选项) 和https://developers.google.com/apps-script/concepts/manifests

摘要: 您必须编辑appsscript.json清单文件。默认情况下,这在您的文件列表中不可见。单击菜单“视图”->“显示清单文件”。

然后将“ oauthScopes”部分添加到清单中,其中包含一个数组,该数组包含在“范围”选项卡的菜单“文件”->“项目属性”下找到的范围(当然,使其成为适当的json数组)。减少多余的作用域和/或换成较宽松的作用域(只读而不是完全访问权限等)。

答案 1 :(得分:0)

选择的答案很好,但在我的用例中不起作用:从电子表格读取数据。我找到了另一个解决方案:
https://developers.google.com/apps-script/guides/services/authorization#manual_authorization_scopes_for_sheets_docs_slides_and_forms

将此内容放置在主脚本文件(Code.gs或其他)的顶部:

/**
 * @OnlyCurrentDoc
 */

此后您无需进入清单等,但您仍然可以将其放入清单中以保持盖紧状态:

"oauthScopes": ["https://www.googleapis.com/auth/spreadsheets.currentonly"]

为什么oauthScopes-只读方式对我不起作用

我的脚本仅从电子表格中读取数据。我正在使用此功能:

 SpreadsheetApp.getActiveSpreadsheet()

当我按照所选答案中的建议放置只读作用域时,在应用程序页面上出现错误,指出该功能无法与只读作用域一起使用,它需要完全访问权限。最重要的是,当初次与用户一起启动应用程序时,在实际的权限获取屏幕之前,有一个可怕的危险页面,说该应用程序尚未得到Google的验证,并显示蓝色的“将我带回安全”按钮。这肯定会吓跑大多数用户!为了获得通过,用户必须单击左下角的小文本链接,该链接不是很直观。同样的警报也早在那儿,没有身份验证范围。它仍然存在,因为该应用程序仍在询问用户阅读其所有Google电子表格的权限。 (所以基本上oauthScopes不能解决我的问题,并导致我的应用出错)

但是当我将这些@OnlyCurrentDoc行放在代码顶部而不是执行oauthScopes时,脚本放弃了尝试访问用户的一切的权限,现在甚至可怕的“未验证”页面不见了。我只需要确保用户具有对原始电子表格的读取访问权限,并且应用程序链接对他们有效,而无需太多干扰:询问此屏幕截图:

shot

然后,它仍然无法编辑原始电子表格,因为用户的凭据对其只有读权限。


其他提示:发布设置:

以以下身份执行该应用:用户访问网络应用

有权访问该应用的人:任何人

这意味着:当用户访问应用程序的URL时,他们将需要使用自己的登录凭据,而不是您的登录凭据。并且仅当他们的帐户被授予访问基础数据的权限时,该应用才能为他们工作。