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

如何使用OAuth结合Java SDK实现Azurite身份认证?

用OAuth令牌完成Azurite的Java SDK身份认证

前提:启用Azurite HTTPS OAuth模式

启动Azurite时必须指定--oauth参数,同时启用HTTPS。可以用自带命令生成自签名证书并启动:

azurite --oauth --cert

证书默认存放在~/.azurite/azurite.pem。


1. 用Azure CLI登录测试租户

Azurite模拟的Azure AD测试租户ID为f8cdef31-a31e-4b4a-93e4-5f571e91255a,用Azure CLI登录该租户(无需订阅):

az login --tenant f8cdef31-a31e-4b4a-93e4-5f571e91255a --allow-no-subscriptions

2. Java代码中获取OAuth令牌并连接Azurite

使用Azure Identity库的AzureCliCredential获取令牌,直接对接Azurite的HTTPS端点:

import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;

public class AzuriteOAuthDemo {
    public static void main(String[] args) {
        // 初始化测试租户的CLI凭证
        AzureCliCredential credential = new AzureCliCredentialBuilder()
                .tenantId("f8cdef31-a31e-4b4a-93e4-5f571e91255a")
                .build();

        // 构建BlobServiceClient,指向Azurite HTTPS端点
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                .endpoint("https://127.0.0.1:10000")
                .credential(credential)
                .build();

        // 验证连接:列出所有容器
        blobServiceClient.listBlobContainers().forEach(container -> 
            System.out.println("容器:" + container.getName())
        );
    }
}

3. 解决自签名证书信任问题

Java默认不信任Azurite的自签名证书,有两种处理方式:

  • 导入证书到信任存储(推荐):
    keytool -importcert -file ~/.azurite/azurite.pem -alias azurite -keystore $JAVA_HOME/lib/security/cacerts
    
    输入默认密码changeit完成导入。
  • 测试环境临时禁用证书验证:
    在代码中配置HttpClient跳过证书校验:
    import com.azure.core.http.HttpClient;
    import com.azure.core.http.netty.NettyAsyncHttpClientBuilder;
    import io.netty.handler.ssl.InsecureTrustManagerFactory;
    import io.netty.handler.ssl.SslContextBuilder;
    
    // ...
    HttpClient insecureHttpClient = new NettyAsyncHttpClientBuilder()
            .sslContext(SslContextBuilder.forClient()
                    .trustManager(InsecureTrustManagerFactory.INSTANCE)
                    .build())
            .build();
    
    BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
            .endpoint("https://127.0.0.1:10000")
            .credential(credential)
            .httpClient(insecureHttpClient)
            .build();
    

4. 生成用户委托密钥

完成OAuth认证后,即可生成用户委托密钥用于创建SAS令牌:

import com.azure.storage.blob.models.UserDelegationKey;
import java.time.OffsetDateTime;

// ...
OffsetDateTime keyStart = OffsetDateTime.now();
OffsetDateTime keyExpiry = keyStart.plusDays(1);
UserDelegationKey userDelegationKey = blobServiceClient.getUserDelegationKey(keyStart, keyExpiry);

// 后续用该密钥生成SAS令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:50:14