【问题标题】:How to narrow down the auth/drive scope for a google apps script?如何缩小谷歌应用程序脚本的身份验证/驱动范围?
【发布时间】:2018-03-25 13:31:40
【问题描述】:

我已经构建了一个谷歌应用脚​​本网络应用程序。对于 Google Drive 相关功能,该应用程序需要 auth/drive.install(与 Drive UI 集成)和 auth/drive.file(在相关文件属性中存储与文件关联的一些数据)范围。其他范围为auth/urlshortener、auth/userinfo.email 和auth/userinfo.profile。据我了解,后两者是身份验证所必需的。

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

  • 查看和管理您 Google 云端硬盘中的文件(对应于 auth/drive scope)
  • 管理您的 goo.gl 短 URL (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

显然,auth/drive 和 auth/urlshortner 是在 GAS IDE(资源 > 高级 Google 服务)和开发者控制台中启用的高级 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_* 功能。自从我使用节点谷歌应用程序脚本模块进行开发以来,这些都是以某种方式隐式添加的。我不需要用户的许可。如何摆脱它?

有什么解决方法吗?

【问题讨论】:

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


    【解决方案1】:

    只是自己处理。

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

    总结: 您必须编辑 appsscript.json 清单文件。默认情况下,这在您的文件列表中不可见。点击菜单“查看”->“显示清单文件”即可。

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

    【讨论】:

      【解决方案2】:

      选择的答案很好,但在我的用例中不起作用:从电子表格中读取数据。我找到了另一个解决方案:
      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()
      

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

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

      而且它无论如何也无法编辑原始电子表格,因为用户的凭据只有读取权限。


      附加提示:发布设置:

      执行应用程序为:用户访问网络应用程序

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

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

      【讨论】:

      • 只使用建议的 oauthScopes 字符串它确实对我有用(旁注:我不需要 @OnlyCurrentDoc 只看到权限请求:View and manage spreadsheets that this application has been installed in)
      猜你喜欢
      • 2020-10-09
      • 2018-10-20
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2016-11-14
      • 2022-12-03
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多