如何使用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/cacertschangeit完成导入。 - 测试环境临时禁用证书验证:
在代码中配置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
相关产品推荐
相关产品推荐

