如何使用Azure Java SDK实现az account get-access-token命令功能?
使用Azure Java SDK获取指定资源的访问令牌
核心依赖
先确保项目引入Azure身份验证核心SDK的依赖,以Maven为例:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.12.0</version> <!-- 建议使用最新稳定版 --> </dependency>
实现方案
1. 复用当前环境身份(与az cli上下文对齐)
DefaultAzureCredential会自动适配当前环境的身份源(比如az cli已登录账户、环境变量、托管身份等),是最通用的方案:
import com.azure.identity.DefaultAzureCredential; import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.core.credential.AccessToken; import com.azure.core.credential.TokenRequestContext; public class AccessTokenFetcher { public static void main(String[] args) { // 对应az命令中--resource参数的目标资源ID String targetResource = "api://xxxxx.microsoft.com/YYYY/ZZZZ"; DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build(); // Azure AD v2端点要求格式为 {resourceId}/.default,等价于v1端点的resource参数 TokenRequestContext requestContext = new TokenRequestContext() .addScopes(targetResource + "/.default"); // 同步获取令牌,异步场景可改用subscribe()处理 AccessToken accessToken = credential.getToken(requestContext).block(); System.out.println("Access Token: " + accessToken.getToken()); System.out.println("过期时间: " + accessToken.getExpiresAt()); } }
2. 仅复用az cli登录身份
如果只想严格使用当前az cli的登录账户,可直接用AzureCliCredential:
import com.azure.identity.AzureCliCredential; import com.azure.core.credential.AccessToken; import com.azure.core.credential.TokenRequestContext; public class CliAccessTokenFetcher { public static void main(String[] args) { String targetResource = "api://xxxxx.microsoft.com/YYYY/ZZZZ"; AzureCliCredential cliCredential = new AzureCliCredential(); TokenRequestContext requestContext = new TokenRequestContext() .addScopes(targetResource + "/.default"); AccessToken accessToken = cliCredential.getToken(requestContext).block(); System.out.println("Access Token: " + accessToken.getToken()); } }
关键注意点
- 必须确保
az cli已完成登录(执行过az login),否则上述凭据类无法获取有效身份。 /.default后缀是Azure AD v2端点的要求,用于匹配v1端点的resource参数逻辑,不能省略。
内容的提问来源于stack exchange,提问作者aurelianr
相关产品推荐
相关产品推荐

