如何使用C#通过访问令牌连接Blob存储容器并读取数据
修改方案
前置准备
你需要先获取到对应Blob存储的有效访问令牌,常用的有两类:
- Azure AD颁发的访问令牌:权限范围(scope)需配置为
https://storage.azure.com/.default,且令牌对应的身份已分配目标容器的存储Blob数据读取者角色 - SAS(共享访问签名)令牌:需提前在存储账户/容器层面生成带读取权限的SAS令牌
修改后代码(Azure AD访问令牌版)
// 替换为你实际获取到的Azure AD访问令牌 string accessToken = "你的有效访问令牌"; // 替换为你的存储账户名称 string storageAccountName = "你的存储账户名"; // 构造存储凭证 var credentials = new StorageCredentialsToken(storageAccountName, accessToken); // 构造Blob客户端,存储账户Blob端点格式固定为https://<存储账户名>.blob.core.windows.net/ var blobClient = new CloudBlobClient(new Uri($"https://{storageAccountName}.blob.core.windows.net/"), credentials); // 后续逻辑和原代码完全一致,无需修改 CloudBlobContainer container = blobClient.GetContainerReference("ContainerName"); CloudBlockBlob blob = container.GetBlockBlobReference("FileName"); string xmlFile = blob.DownloadTextAsync().Result; Console.WriteLine(xmlFile);
修改后代码(SAS令牌版)
如果你持有的是SAS令牌,用以下方式构造即可:
// 替换为你实际的SAS令牌,格式为?sv=xxxx&ss=xxxx... string sasToken = "你的SAS令牌"; string storageAccountName = "你的存储账户名"; var credentials = new StorageCredentials(sasToken); var blobClient = new CloudBlobClient(new Uri($"https://{storageAccountName}.blob.core.windows.net/"), credentials); // 后续逻辑和原代码完全一致 CloudBlobContainer container = blobClient.GetContainerReference("ContainerName"); CloudBlockBlob blob = container.GetBlockBlobReference("FileName"); string xmlFile = blob.DownloadTextAsync().Result; Console.WriteLine(xmlFile);
注意事项
- Azure AD访问令牌默认有效期为1小时,过期前需要重新申请新的令牌更新凭证,否则会鉴权失败
- 确保访问令牌的权限覆盖目标容器的读取操作,否则会返回403拒绝访问错误
- 需要提前安装NuGet包:
Microsoft.Azure.Storage.Blob,版本和你原有代码使用的版本保持一致即可
内容的提问来源于stack exchange,提问作者Kishore
相关产品推荐
相关产品推荐

