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

Azure Storage SAS令牌生成时报服务端认证失败错误如何解决?

错误原因及修复方案

你的代码存在3处核心配置错误,导致SAS签名与实际访问资源不匹配,触发身份验证报错:

  • ShareSasBuilder.Resource 参数配置错误:"b" 是Blob存储的资源标识,Azure文件存储的单个文件资源标识应为 "f"
  • ShareSasBuilder.ShareName 参数填写错误:你初始化ShareClient时使用的文件共享名为zttsox20201027154501,此处错误填写为"aaa",直接导致签名不匹配
  • 缺少文件路径配置:生成单个文件的SAS时,需要给ShareSasBuilder指定FilePath属性为文件在共享内的相对路径,否则签名范围和最终拼接的文件URI不匹配

修正后代码

public IActionResult TestBlobClient()
{
    try
    {
        string storageAccount = "myaccount";
        string password = "mykey";

        var sharedKeyCredential = new StorageSharedKeyCredential(storageAccount, password);
        var shareClient = new ShareClient(new Uri("https://aaa.file.core.windows.net/zttsox20201027154501"), sharedKeyCredential);

        ShareDirectoryClient directory = shareClient.GetDirectoryClient("Output/14");
        ShareFileClient file = directory.GetFileClient("637655759841727494_main.wav");
        // 声明文件在共享内的相对路径
        string filePath = "Output/14/637655759841727494_main.wav";

        var shareSasBuilder = new ShareSasBuilder
        {
            ShareName = "zttsox20201027154501", // 修正为实际共享名
            Protocol = SasProtocol.None,
            ExpiresOn = DateTime.UtcNow.AddYears(50),
            Resource = "f", // 修正为文件存储单文件资源标识
            FilePath = filePath // 新增文件路径配置
        };

        shareSasBuilder.SetPermissions(ShareFileSasPermissions.Read);
        var url = new Uri(file.Uri + "?" + shareSasBuilder.ToSasQueryParameters(sharedKeyCredential).ToString());

        return Ok(url);
    }
    catch (Exception ex)
    {
        return StatusCode(StatusCodes.Status400BadRequest, ex.Message);
    }
}

补充提示:不建议设置50年这么长的SAS有效期,密钥泄露会带来极高的数据安全风险,建议根据实际使用场景设置尽可能短的有效期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:39:00