0

我们正在寻找一种方法来在我们的网络应用程序的用户上下文(授权)中触发插件中的功能。我们尝试使用 Apps Script Execution API 来触发它。流程是附加组件(应用程序脚本)在我们的 Web 应用程序中注册访问令牌,并且 Web 应用程序使用访问令牌触发执行 API。这是第一次。但问题是,访问令牌的有效期只有几分钟。之后,由于授权失败,Web 应用程序无法通过执行 API 启动功能。

问题:

我们使用执行 API 从用户上下文中的另一个 Web 应用程序触发插件/应用程序脚本功能的方法是否正确?

如果是这样,我们如何避免访问令牌过期?显然,应用程序脚本中没有 API 来“获取刷新令牌”/“刷新令牌”。我们如何刷新令牌以使令牌永远有效(直到用户取消)?

在这种情况下,有什么完全不同的方法会有所帮助吗?

我看到像“PearDeck”、“Form Approvals”、“Form Publisher”等附加组件正在成功地做到这一点(通过用户授权从网络应用程序触发附加功能)。

希望在这个论坛得到一些专家的建议。谢谢

使用的执行 API - 令牌过期的问题

function prepareToken() {
// send to web app
    var token = ScriptApp.getOAuthToken();

    URLFetchApp.fetch("url?token="+token);
}

function doSomeWorkFromUserContext() {
    // impl here
}

POST https://script.googleapis.com/v1/scripts/{scriptId}:run

Request Header
Authorization: Bearer + {token}

Request Body 
{
  "function": "doSomeWorkFromUserContext"
}

函数 doSomeWorkFromUserContext 应该在调用的所有时间都被调用,但在一段时间后会出现授权错误。

4

1 回答 1

1

当用户首次授权您的应用程序时,您会收到一个刷新令牌以及访问令牌。访问令牌通常在一小时后过期,您必须使用刷新令牌来获取新的访问令牌。

请注意,仅当用户最初授权您的应用时才会返回刷新令牌。

您需要撤销用户的授权(见下文)并让他们重新授权应用程序以获取刷新令牌。可以通过以下 3 种方式之一来撤销访问权限:

Eric Koleda 的 GAS OAuth2 库在管理整个 OAuth2 流程(包括自动刷新访问令牌)方面做得很好,所以一定要检查一下。

于 2019-08-27T14:53:36.570 回答