GoogleCredentials.refreshIfExpired 每次都会返回新的访问令牌

问题描述 投票:0回答:1

我正在尝试使用以下代码获取 FCM v1 的访问令牌。

static String SCOPES = "https://www.googleapis.com/auth/firebase.messaging";
private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .getApplicationDefault()
          .createScoped(Arrays.asList(SCOPES));
  // googleCredentials.refresh();
  googleCredentials.refreshIfExpired();   // Doesn't work either
  return googleCredentials.getAccessToken().getTokenValue();
}

我能够获取令牌并向 FCM 发布消息。问题是,每次我调用

refreshIfExpired()
时,即使前一个令牌没有过期,它也会给我一个新令牌。这是预期的吗?我应该在最后检查一下是否过期吗?我猜测会有一些速率限制器来获取新的代币。我也尝试过拥有一个常见的
GoogleCredentials
对象,但仍然存在同样的问题。

刷新令牌存储在哪里?它在哪里检查访问令牌过期(客户端或服务器)?

我尝试阅读文档,但对我来说还不够清楚。我需要对此有一些清晰的了解,并且需要一种仅在令牌过期时刷新令牌的方法。

oauth-2.0 firebase-cloud-messaging access-token
1个回答
0
投票

如果您使用服务帐户创建访问令牌,则它不会创建刷新令牌。

服务帐户没有刷新令牌。发送消息时必须重新进行身份验证过程。

即使我在令牌响应中得到了这个。

  refresh_token: 'jwt-placeholder'
© www.soinside.com 2019 - 2024. All rights reserved.