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

如何在Java中生成GCP identity-token?(替代gcloud CLI方式)

Java生成GCP Identity Token的实现方案

你可以借助Google官方的google-auth-library-oauth2-http库实现和gcloud auth print-identity-token等效的功能,以下是两种常见场景的实现思路和代码:

依赖配置

先在项目中引入Maven依赖:

<dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>1.20.0</version> <!-- 建议使用最新稳定版 -->
</dependency>

场景1:本地开发环境(复用gcloud用户凭据)

该逻辑和gcloud auth print-identity-token完全对齐,会自动读取本地的Application Default Credentials(需要先执行gcloud auth application-default login完成配置):

import com.google.auth.oauth2.IdentityToken;
import com.google.auth.oauth2.IdentityTokenProvider;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;

public class LocalIdentityTokenGenerator {
    public static void main(String[] args) throws IOException {
        // 加载本地默认凭据(对应gcloud登录的用户身份)
        GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
        
        if (!(credentials instanceof IdentityTokenProvider)) {
            throw new IllegalStateException("当前凭据不支持生成Identity Token");
        }
        IdentityTokenProvider tokenProvider = (IdentityTokenProvider) credentials;
        
        // 生成ID Token,若需指定受众(如调用特定服务),替换为对应URL/标识符
        // 对应gcloud命令:gcloud auth print-identity-token --audience=xxx
        IdentityToken identityToken = tokenProvider.getIdToken(null);
        
        // 输出令牌内容
        System.out.println(identityToken.getTokenValue());
    }
}

场景2:生产/服务端环境(使用服务账号)

如果在GCP服务(如GCE、GKE、Cloud Functions)中运行,会自动使用内置服务账号凭据;本地测试或外部环境可直接加载服务账号密钥文件:

import com.google.auth.oauth2.IdentityToken;
import com.google.auth.oauth2.IdentityTokenProvider;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collections;

public class ServiceAccountTokenGenerator {
    public static void main(String[] args) throws IOException {
        // 加载服务账号密钥文件
        GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("/path/to/service-account-key.json"))
                .createScoped(Collections.emptyList());
        
        if (!(credentials instanceof IdentityTokenProvider)) {
            throw new IllegalStateException("服务账号凭据不支持生成Identity Token");
        }
        IdentityTokenProvider tokenProvider = (IdentityTokenProvider) credentials;
        
        // 服务账号生成ID Token必须指定受众,替换为目标服务的标识符
        String audience = "https://your-target-service.example.com";
        IdentityToken identityToken = tokenProvider.getIdToken(audience);
        
        System.out.println(identityToken.getTokenValue());
    }
}

关键说明

  • 本地环境需先执行gcloud auth application-default login,否则会无法加载凭据
  • 服务账号生成ID Token必须指定受众,用户凭据可省略(对应gcloud默认生成无受众令牌的逻辑)
  • 生成的令牌有效期为1小时,过期后需重新生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:01:20