使用执行 API 通过用户授权调用加载项中的函数



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

问题:

我们使用执行 API 从用户上下文中的另一个 Web 应用触发加载项/应用程序脚本函数的方法是否正确?

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

在这种情况下,是否有任何完全不同的方法会有所帮助?

我看到"PearDeck"、"表单审批"、"表单发布者"等附加组件已成功执行此操作(在用户授权下从 Web 应用程序触发附加组件功能(。

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

使用的执行 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应该在调用的所有时间被调用,但在一段时间后出现授权错误。

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

请注意,刷新令牌仅在用户最初授权应用时返回。

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

  • 让用户卸载应用
  • 使用ScriptApp.invalidateAuth()功能
  • 使用用户访问令牌("https://accounts.google.com/o/oauth2/revoke?token={token}"(向 OAuth2 撤销端点发出 HTTP GET 请求

Eric Koleda 的 GAS OAuth2 库在管理整个 OAuth2 流程(包括自动刷新访问令牌(方面做得很好,因此请务必检查一下。

最新更新