在调用Google API时检测访问令牌过期

时间:2017-05-15 09:53:20

标签: google-apps-script google-oauth2

我有一个部署为API Executable的Google Apps脚本。我可以从我的基于java的Web应用程序调用它。但是,{strong>仅有时与Authorization is required to perform that operation失败。我已完成分析并发现它失败,因为如果访问令牌到期时间少于6分钟,Apps脚本会返回此错误。有一个原因可以解释为什么Apps Script会以这种方式运行,这超出了这个问题的范围。但是,解决方法是在到期时间小于6分钟时生成新的access_token

我正在使用Java Google客户端库来管理访问令牌:

GoogleCredential credential = new GoogleCredential.Builder()
                                    .setTransport(httpTransport)
                                    .setJsonFactory(jsonFactory)
                                    .setClientSecrets("<<clientId>>", "<<clientSecret>>")
                                    .build();
credential.setRefreshToken("<<refresh_token>>");

使用上面的credential我正在创建Script对象:

Script scriptService = new Script.Builder(httpTransport, jsonFactory, credential).setApplicationName("test").build();

调用Apps脚本:

scriptService.scripts().run("test script");

客户端库负责生成访问令牌,将其存储在内存中,到期时调用OAuth API以生成新令牌。

现在,我需要你的建议:

  1. 检查访问令牌的到期时间是否少于6分钟
  2. 如果是,则生成新的访问令牌

1 个答案:

答案 0 :(得分:0)

以下是查找令牌过期并生成新访问令牌的剩余时间的代码:

  

检查访问令牌的到期时间是否少于6分钟

credential.getExpiresInSeconds()
  

如果是,则生成新的访问令牌

credential.refreshToken()