You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Google Cloud访问令牌自定义过期时间不生效如何解决?

问题

我正在使用Java获取Google Cloud的Downscoped访问令牌,代码如下(忽略非必要配置):

GoogleCredentials sourceCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream);
DownscopedCredentials downscopedCredentials = DownscopedCredentials.newBuilder()
                .setSourceCredential(sourceCredentials)
                .setCredentialAccessBoundary(credentialAccessBoundary)
                .build();
AccessToken accessToken = downscopedCredentials.refreshAccessToken();

默认返回的令牌expires_in为3599秒(1小时),我尝试将其修改为300秒,于是给源凭证添加了.createWithCustomLifetime(300):

GoogleCredentials sourceCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream)
                .createWithCustomLifetime(300);

此时服务账号JWT的payload中exp字段已成功设置为iat + 300,但返回的访问令牌响应仍显示:

{
    "access_token": "$token_response",
    "expires_in": 3599
}

请问如何让expires_in变为300秒?

原因

你给源服务账号凭证设置的createWithCustomLifetime仅修改了源JWT自身的过期时间,这个JWT只是用来向Google令牌服务请求Downscoped令牌的"凭证",它的有效期不会传递给最终生成的Downscoped访问令牌。Downscoped令牌的默认有效期由Google服务控制,默认是1小时。

解决方案

要设置Downscoped访问令牌的有效期,需要在构建DownscopedCredentials时,通过setTokenLifetime方法指定持续时间,而不是修改源凭证的生命周期。修改后的代码如下:

import java.time.Duration;

// ...

GoogleCredentials sourceCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream);
DownscopedCredentials downscopedCredentials = DownscopedCredentials.newBuilder()
        .setSourceCredential(sourceCredentials)
        .setCredentialAccessBoundary(credentialAccessBoundary)
        .setTokenLifetime(Duration.ofSeconds(300)) // 指定Downscoped令牌有效期为300秒
        .build();
AccessToken accessToken = downscopedCredentials.refreshAccessToken();

注意事项

  • Google Cloud对Downscoped令牌的有效期有范围限制:最小60秒,最大3600秒(1小时),300秒在合法范围内。
  • 源服务账号JWT的有效期需要大于等于Downscoped令牌的有效期,否则会在请求令牌时报错。如果你的源JWT默认有效期是1小时,无需额外修改,已经满足要求;如果之前修改过源JWT的有效期为300秒,也没问题,刚好匹配Downscoped令牌的有效期。

内容的提问来源于stack exchange,提问作者Nutcracker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:12:51