4

系统组件

  • 发布了 Google Apps 脚本插件“插件”)并在 G Suite 市场上发布,用于全域安装
    • 仍在其原始 GCP 项目P1中
    • 具有创建脚本时自动生成的 OAuth2 客户端 ID
  • Google Cloud 中的Web 应用程序(“web-app”),出于配额原因,最好在单独的项目P2中(但与附加项目的所有者和组织相同)。它正在替换一个具有相同功能的网络应用程序,该功能直到现在是附加组件的一部分。

client-secrets-addon.json看起来像这样:

{"web":{
"client_id": "57...1t.apps.googleusercontent.com",
"project_id": "project-id-95...70",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url":
"https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "K2...y1",
"redirect_uris": ["https://script.google.com/oauthcallback"]
}}

所有者无权向其添加不同的重定向 URI。显然是特定于任何 Apps 脚本项目的默认客户端的安全约束。看来,我们不能只通过新的web-app使用相同的客户端 ID 。

用例

资源所有者的附加安装

AG Suite 管理员或资源所有者为 Google Drive 中的文件安装插件。在安装过程中,用户会看到 OAUTH2 同意屏幕,以将必要的范围授予 Google Drive 和其他一些 Google API 范围(包括离线访问)。

加载项被触发

当没有 Google 帐户的用户使用Google Drive 中资源所有者的文件 ( file ) 时,会触发加载项。附加组件“以我的身份执行”(脚本所有者)。插件代表资源所有者向其他用户发送通知。

用户响应通知

收到通知后,用户(不是 Google 帐户)将被定向到网络应用程序以执行某些操作。结果,网络应用再次需要访问文件

问题

  1. web-app之前是在与插件相同的脚本中实现的。有许多资源所有者和管理员已经授予了范围,我们不想因为新的web-app缺少范围而破坏附加组件

  2. 由于在web 应用程序访问文件时资源所有者不存在,因此web应用程序在安装过程中需要范围,就像附加组件一样。

要求

  1. 如果在加载项安装期间资源所有者只需完成一项授权,则最佳用户体验将是。

  2. 现有资源所有者无需在新Web 应用程序中重复授权以避免中断。

  3. 在 Google 帐户的具有访问权限的应用程序列表中,将加载项网络应用程序显示为一个应用程序,并且撤销访问权限肯定会撤销这两个组件的访问权限。

  4. 如果是满足这些要求的唯一选择,我们会考虑将web-app托管在与附加组件相同的项目中。

共享已完成的插件的Google API 授权的最佳方法是什么,以便新的网络应用程序可以使用它们?

4

0 回答 0