【问题标题】:How to increase the expiry time of access token?如何增加访问令牌的到期时间?
【发布时间】:2019-06-19 23:22:01
【问题描述】:

我有访问令牌,它会在 1 小时内过期,但我希望它的工作时间更长,所以我使用 setExpiresInSeconds() 方法设置时间以及使用 getExpiresInSeconds() 检索值的时间。它显示了我添加的时间,但访问令牌会在 1 小时内过期,即使我保持时间超过 1 小时。

GoogleCredential googleCred = GoogleCredential.fromStream(serviceAccount);

            HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
            JacksonFactory jsonFactory = new JacksonFactory();
              Set<String> scopes = new HashSet<String>();        
                scopes.add(DirectoryScopes.ADMIN_DIRECTORY_USER);
                scopes.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP);
                scopes.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP_MEMBER);

            GoogleCredential credentialWithUser = new GoogleCredential.Builder()
                    .setTransport(httpTransport)
                    .setJsonFactory(jsonFactory)
                    .setServiceAccountUser(SERVICE_ACCOUNT_USER)  // <--- mail of domain's admin
                    .setServiceAccountId(googleCred.getServiceAccountId())
                    .setServiceAccountScopes(scopes)
                    .setServiceAccountPrivateKey(googleCred.getServiceAccountPrivateKey())
                    .setServiceAccountPrivateKeyId(googleCred.getServiceAccountPrivateKeyId())  
                    .setTokenServerEncodedUrl(googleCred.getTokenServerEncodedUrl()).build();                     

          // Use the Google credential to generate an access token

          credentialWithUser.refreshToken();
          credentialWithUser.setExpiresInSeconds(5000l);    
          token = credentialWithUser.getAccessToken();
          log.info("getAccessToken()  access token value  : " + token );
          String lifeSpan = credentialWithUser.getExpiresInSeconds().toString();
          log.info("getAccessToken()  access token lifespan in second  : " + lifeSpan + "sec"); 

我希望我的访问令牌有更长的到期时间。我正在开发桌面应用程序,但我无法使用 url 来获取刷新令牌,因为我完成了 redirect_uri。您能否建议我增加访问令牌的时间段的最佳选择?

【问题讨论】:

    标签: java google-api-java-client


    【解决方案1】:

    来自 Javadoc(我的重点):

    public Credential setExpiresInSeconds(java.lang.Long expiresIn)
    

    以秒为单位设置访问令牌的生命周期(例如 3600 表示一小时)或 null 表示无。

    仅出于调用超级实现和更改返回类型的目的才支持覆盖,仅此而已。

    访问令牌由 Google 提供,允许您访问 API。如果您可以更改到期时间,那将不会有太多的安全性,不是吗?

    【讨论】: