【问题标题】:Google AppsScript - Specify Script Scopes (for REST API calls)Google Apps 脚本 - 指定脚本范围(用于 REST API 调用)
【发布时间】:2016-03-23 18:37:20
【问题描述】:

我在工作场所经常使用 AppsScript。我在 AppsScript 中构建了许多自定义 OAuth2.0 流,允许应用程序调用 Google 的 REST API,并且我还启用了“内置”API 交互对象(GmailApp、CalendarApp 等)。如果您启用任何内置 API,脚本编辑器会将相关范围添加到项目信息中,然后在 Web 应用首次加载时询问用户与这些 API 交互的权限。

如果我需要与 REST API 和少数内置 API 调用对象进行交互,用户需要首先授予内置 API 范围的权限,然后必须遵循单独的 OAuth 流程,用于 REST API .这造成了非常丑陋的用户体验。

有没有办法将 REST API 范围添加到项目信息中的范围列表中,这样当用户首次加载应用程序时,它会要求他们授予项目需要的所有范围的权限?然后,我可以使用 ScriptApp.getOAuthToken() 从脚本会话中检索用户 oauth 令牌,并在所有外部 REST API 调用中使用它。

编辑(~12:00:05 18/DEC/15):

请注意,我已经知道如何通过链接到 AppsScript 项目的开发者控制台项目启用 API - 我想找到一种方法将所有启用的 API 添加到脚本属性,以便当用户启动应用程序,它要求他们授予权限以代表他们访问所有启用的 API(甚至是 REST API),因此我不需要为 REST API 使用第二个手动 OAuth 流/令牌。

编辑(~14:00:08 18/DEC/15):

我还研究了 Drive 中的导入/导出功能,记录在此: https://developers.google.com/apps-script/import-export 并且找不到任何方法来更改项目的范围(或提供任何范围),这种方式。

【问题讨论】:

    标签: rest google-apps-script user-permissions


    【解决方案1】:

    如果您进入菜单“资源 > 高级 Google 服务”,您可以在应用程序脚本中启用特定 API。它将打开一个包含 API 列表的弹出窗口,但您还可以选择使用与您的 Apps 脚本项目关联的项目转到开发者控制台。

    您可以从那里获取与同一 Apps 脚本项目相关的必要信息(clientId 等),并在您的 OAuth 流程中使用它。

    如果您已经有一个项目,其中包含所有必需的配置和所有必要的 API,您还可以将当前的 Apps 脚本项目链接到该应用程序,这样您就不必再做同样的事情了。

    在菜单“资源 > 开发者控制台项目”中,将打开一个弹出窗口,您可以在其中选择访问开发者控制台,还可以选择将当前的 Apps 脚本项目与您的任何其他应用程序相关联已经有。

    请记住,当您尝试使用 API 时,您必须在“高级 Google 服务”中启用它,无论是在弹出窗口显示的列表中还是在开发者控制台中。

    完成此操作后,访问令牌将与同一个应用程序相关联,并且用户在启用新 API 时只会授予一次权限。

    我希望这会有所帮助。

    【讨论】:

    • 我知道您必须在“高级 Google 服务”部分启用 API。这一切都很好,并允许您使用客户端 ID 和秘密创建手动 OAuth 流 - 但它不会将启用的 API 的范围添加到脚本属性 - 并且不会提示用户授予交互权限Web 应用程序启动时的那些 API(代表用户)。我需要一种将额外的 API 范围添加到脚本属性的方法,这样当用户启动 Web 应用程序时,它会要求他们将应用程序权限授予所有已启用的 API(甚至是 REST API)。
    • 如果您需要的api在“Advances Google Services”列表中,启用后即可使用相关服务。例如。启用 Google Apps Activity API(也在开发者控制台中)后,在您的脚本中,您可以使用服务“AppsActivity”,并且将添加相关范围。但是您必须将其添加到脚本中才能被识别。您是否尝试使用 Apps 脚本不支持的 API?
    • 谷歌云资源管理器 API 就是一个很好的例子。如果我想创建一个代表用户运行的 Web 应用程序,并读取他们有权访问的云资源,然后使用 GmailApp 向他们发送电子邮件,我可以在高级 Google 服务中启用 Gmail,但无法让脚本知道我计划使用 Cloud Resource Manager API(通过 UrlFetchApp),因此它不会将范围添加到范围列表中(取消文件 > 项目属性),并且不会询问用户访问此 API 的权限。我需要一种方法让脚本知道我打算使用这个 API,所以它会询问用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多