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

使用含容器名和SAS Token的连接字符串上传Blob时遇AuthenticationFailed错误

问题描述
  • 使用NuGet包:Azure.Storage.Blobs 版本12.14.1
  • 容器级SAS URI:https://my-storage.blob.core.windows.net/my-container?sv=2018-03-28&sr=c&sig=DZSbKgaKd%2FjYQbYQf7eOAZ%2BVFSY1Rq2M7HIVXs%2F%2BPtA%3D&se=2023-02-12T04%3A08%3A07Z&sp=rcwl
  • 上传代码:
var blobClient = new BlobClient(new Uri(connectionString));
await using var fileStream = entry.Open();
await blobClient.UploadAsync(fileStream, true);
  • 报错信息:

AuthenticationFailed
服务器无法验证请求。请确保Authorization标头的值格式正确,包括签名。
附带信息:RequestId:5a7b1650-501e-001d-7ed2-3d2845000000,Time:2023-02-11T04:35:40.8903035Z,签名不匹配。使用的签名字符串是rcwl。

解决办法

问题出在SAS URI的使用方式错误,容器级SAS需要配合正确的客户端实例或完整Blob路径来操作单个Blob,具体两种修复方式:

方式一:构造完整的Blob URI

将容器SAS URI拼接上具体的Blob文件名,再创建BlobClient:

// 拼接Blob名称到容器SAS URI后
var blobUri = new Uri("https://my-storage.blob.core.windows.net/my-container/your-blob-filename?sv=2018-03-28&sr=c&sig=DZSbKgaKd%2FjYQbYQf7eOAZ%2BVFSY1Rq2M7HIVXs%2F%2BPtA%3D&se=2023-02-12T04%3A08%3A07Z&sp=rcwl");
var blobClient = new BlobClient(blobUri);
await using var fileStream = entry.Open();
await blobClient.UploadAsync(fileStream, true);

方式二:通过BlobContainerClient获取BlobClient

先使用容器SAS URI创建容器客户端,再通过容器客户端获取目标Blob的客户端:

var containerClient = new BlobContainerClient(new Uri(connectionString));
// 替换成实际要上传的Blob文件名
var blobClient = containerClient.GetBlobClient("your-blob-filename");
await using var fileStream = entry.Open();
await blobClient.UploadAsync(fileStream, true);

额外检查点

  • 确认SAS权限:当前sp=rcwl包含写入权限(w),满足Blob上传需求;如果是追加Blob上传,需要额外添加a权限
  • 确认SAS有效期:报错时间在SAS到期时间(2023-02-12T04:08:07Z)之前,此问题可排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:38