1

我正在从我的网络应用程序调用应用程序脚本执行 API。我正在获取ScriptApp.getOauthToken()并将其存储在工作表内。当我打开我的网络应用程序时,我将获得存储的访问令牌并在它的帮助下调用执行 API。

但问题是,一段时间后,令牌过期了,它说

需要授权

当我调用执行 API 时。

有没有办法让访问令牌保持活动状态或在需要时刷新它?

4

1 回答 1

0

I. 你不能也不应该。至少不是本地人

没有本机 Google Apps 脚本服务方法可用于获取和交换不记名令牌的刷新令牌(如果您想刷新过期的 OAuth 2.0 令牌,则需要一个)。也就是说,存储通过方法获得的短期令牌没有实际理由getOauthToken- 如果用户授权您的应用程序,您可以在每次需要发出请求时即时请求令牌。

二、如果你仍然想,使用图书馆

有一个官方认可的 Google Apps 脚本库,可以为您管理 OAuth 2.0 流程。true使用时,如果在颁发token时设置了离线访问,就可以获得刷新token。

三、如果你真的想DIY,你可以随时制作自己的流程

通过构建自定义 JWT 令牌并将其与 Google Identity Platform 端点进行交换,仅使用本机工具即可执行完整的 Oauth 2.0 流程(包括和不包括用户交互)。但这意味着您必须管理所有内容

  1. 构建JWT自定义令牌标头和有效负载,然后对它们进行 base64 url​​encode 并使用适当的签名进行签名并连接到令牌中。
  2. 将自定义 JWT 交换为短暂的不记名令牌,对其进行验证并提取到期时间,然后持久化令牌。
  3. 每次从存储中获取令牌时,请检查到期时间,然后使用第 1 - 2 点中的过程再次重新颁发令牌。
  4. 处理令牌撤销(请注意,您将无法从 Google 的服务器使其无效,只能在您的应用程序中)。
  5. 还有更多的注意事项。

请注意,令牌不能“保持活动状态”,这与 OAuth 协议背后的理念背道而驰 - 单个令牌的生命周期越短,应用程序的安全性就越好。

于 2020-07-14T01:16:17.677 回答