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
相关产品推荐
相关产品推荐

