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

如何使用现成AccessToken获取DataLakeServiceClient实例

正确实现方式

Azure Storage 系列Java SDK的客户端构造器原生支持传入自定义TokenCredential实现,不需要依赖SDK内置的服务主体、授权码等认证流重新生成令牌,直接返回你提前获取到的现成AccessToken即可完成DataLakeServiceClient初始化,全程不会触发新的令牌请求。

具体实现步骤

  • 编写自定义TokenCredential实现类,逻辑仅返回预获取的访问令牌,不执行任何OAuth认证相关的网络请求
  • 传入自定义凭证实例,通过DataLakeServiceClientBuilder构造客户端

代码示例

1. 自定义预取令牌凭证

import com.azure.core.credential.AccessToken;
import com.azure.core.credential.TokenCredential;
import com.azure.core.credential.TokenRequestContext;
import reactor.core.publisher.Mono;
import java.time.OffsetDateTime;

public class PreRetrievedTokenCredential implements TokenCredential {
    private final AccessToken accessToken;

    /**
     * 传入提前获取好的现成AccessToken构造凭证
     * @param existingAccessToken 已获取到的JWT格式访问令牌
     */
    public PreRetrievedTokenCredential(String existingAccessToken) {
        // 若你已经解析出令牌的实际过期时间,可替换OffsetDateTime.MAX为真实过期时间
        // 本实现不会主动发起令牌刷新、重新获取请求,完全使用传入的现成令牌
        this.accessToken = new AccessToken(existingAccessToken, OffsetDateTime.MAX);
    }

    @Override
    public Mono<AccessToken> getToken(TokenRequestContext tokenRequestContext) {
        return Mono.just(accessToken);
    }
}

2. 初始化DataLakeServiceClient

import com.azure.storage.file.datalake.DataLakeServiceClient;
import com.azure.storage.file.datalake.DataLakeServiceClientBuilder;

public class DatalakeClientFactory {
    /**
     * 基于预获取的AccessToken构造DataLakeServiceClient
     * @param storageAccountName 目标存储账户名称
     * @param preFetchedAccessToken 提前获取的有效访问令牌
     * @return 完成配置的DataLakeServiceClient实例
     */
    public DataLakeServiceClient buildServiceClient(String storageAccountName, String preFetchedAccessToken) {
        String datalakeEndpoint = String.format("https://%s.dfs.core.windows.net/", storageAccountName);
        return new DataLakeServiceClientBuilder()
                .endpoint(datalakeEndpoint)
                .credential(new PreRetrievedTokenCredential(preFetchedAccessToken))
                .buildClient();
    }
}

注意事项

  • 传入的AccessToken必须包含访问目标Data Lake Storage的对应权限范围,否则调用接口时会返回401/403权限错误
  • 该实现全程不会触发SDK内置的任何认证流程,完全使用你传入的现成令牌,符合不重新生成令牌的要求
  • 若需要处理令牌过期逻辑,可自行扩展自定义凭证类的令牌更新逻辑,只要保证令牌由你外部逻辑提前获取即可,不需要接入SDK内置的身份认证模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:36:26