Google apps script 如何在调用执行API之前刷新OAuth令牌?

Google apps script 如何在调用执行API之前刷新OAuth令牌?,google-apps-script,google-oauth,google-apps-script-api,Google Apps Script,Google Oauth,Google Apps Script Api,我正在从web应用程序调用应用程序脚本执行API。我正在获取ScriptApp.getOauthToken()并将其存储在工作表中。当我打开我的web应用程序时,我将获得存储的访问令牌,并在它的帮助下调用执行API 但问题是,过了一段时间,代币到期了,它说 需要授权 当我调用执行API时 是否有任何方法可以保持访问令牌处于活动状态或在需要时刷新它?I.您不能也不应该这样做。至少不是天生的 没有本机Google Apps脚本服务方法可用于获取和交换刷新令牌(如果您想刷新过期的OAuth 2.0令牌

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

但问题是,过了一段时间,代币到期了,它说

需要授权

当我调用执行API时


是否有任何方法可以保持访问令牌处于活动状态或在需要时刷新它?

I.您不能也不应该这样做。至少不是天生的

没有本机Google Apps脚本服务方法可用于获取和交换刷新令牌(如果您想刷新过期的OAuth 2.0令牌,则需要一个)作为承载令牌。这就是说,存储通过
getOauthToken
方法获得的短期令牌没有实际理由——如果用户授权了您的应用程序,您可以在每次需要请求时动态请求令牌

II。如果您仍然想要,请使用库

有一个用于Google应用程序的脚本,可以为您管理OAuth 2.0流。使用它时,如果在发出令牌时将脱机访问设置为
true
,则可以获得刷新令牌

III.如果你真的想自己动手做,你可以随时创造自己的流量

通过构建自定义JWT令牌并将其与Google Identity Platform端点交换,可以仅使用本机工具来执行完整的Oauth 2.0流(包括有用户交互和无用户交互)。但这意味着你必须管理一切:

  • 构建自定义令牌头和负载,然后对它们进行base64 URL编码,并使用适当的签名进行签名,然后连接到令牌中
  • 将定制JWT交换为短期承载令牌,验证它并提取到期时间,然后持久化该令牌
  • 每次从存储器中获取令牌时,请检查过期时间,然后使用第1-2点中的过程再次重新颁发令牌
  • 处理令牌撤销(请注意,您将无法从Google的服务器上使其无效,仅在您的应用程序中)
  • 在此过程中还有更多的警告


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

    I.您不能也不应该这样做。至少不是天生的

    没有本机Google Apps脚本服务方法可用于获取和交换刷新令牌(如果您想刷新过期的OAuth 2.0令牌,则需要一个)作为承载令牌。这就是说,存储通过
    getOauthToken
    方法获得的短期令牌没有实际理由——如果用户授权了您的应用程序,您可以在每次需要请求时动态请求令牌

    II。如果您仍然想要,请使用库

    有一个用于Google应用程序的脚本,可以为您管理OAuth 2.0流。使用它时,如果在发出令牌时将脱机访问设置为
    true
    ,则可以获得刷新令牌

    III.如果你真的想自己动手做,你可以随时创造自己的流量

    通过构建自定义JWT令牌并将其与Google Identity Platform端点交换,可以仅使用本机工具来执行完整的Oauth 2.0流(包括有用户交互和无用户交互)。但这意味着你必须管理一切:

  • 构建自定义令牌头和负载,然后对它们进行base64 URL编码,并使用适当的签名进行签名,然后连接到令牌中
  • 将定制JWT交换为短期承载令牌,验证它并提取到期时间,然后持久化该令牌
  • 每次从存储器中获取令牌时,请检查过期时间,然后使用第1-2点中的过程再次重新颁发令牌
  • 处理令牌撤销(请注意,您将无法从Google的服务器上使其无效,仅在您的应用程序中)
  • 在此过程中还有更多的警告

  • 请注意,令牌不能“保持活动”,这与OAuth协议背后的思想背道而驰——单个令牌的寿命越短,应用程序的安全性越好