【问题标题】:Azure storage SAS failed to authenticateAzure 存储 SAS 无法进行身份验证
【发布时间】:2021-12-17 00:56:49
【问题描述】:

您好,我正在尝试为我在 Azure 上的文件创建 SAS 令牌。我收到“服务器无法对请求进行身份验证。确保授权标头的值正确形成,包括签名”错误。以下是我的代码。

    public async Task<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");

        var shareSasBuilder = new ShareSasBuilder
        {
            ShareName = "aaa",
            Protocol = SasProtocol.None,
            ExpiresOn = DateTime.UtcNow.AddYears(50),
            Resource = "b"
        };

        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);
    }

【问题讨论】:

    标签: azure-storage


    【解决方案1】:

    问题在于Resource = "b"。当您将资源设置为b 时,这意味着您将获得一个 blob 的 SAS 令牌。考虑到您正在获取文件共享的 SAS 令牌,此参数的值应为 s

    请尝试以下方法:

            var shareSasBuilder = new ShareSasBuilder
            {
                ShareName = "zttsox20201027154501",
                Protocol = SasProtocol.None,
                ExpiresOn = DateTime.UtcNow.AddYears(50),
                Resource = "s"
            };
    

    更多详情请看此链接:https://docs.microsoft.com/en-us/dotnet/api/azure.storage.sas.sharesasbuilder.resource?view=azure-dotnet#Azure_Storage_Sas_ShareSasBuilder_Resource

    【讨论】:

    • 嗨@Gaurav,我仍然遇到同样的错误。
    • 我刚刚注意到您的共享名称是 zttsox20201027154501 而不是 aaa。我已经更新了我的答案。你能试试吗?
    • 谢谢@gaurav。
    • 嗨@gourav,你能不能帮我只为特定文件设置访问签名。现在,即使资源类型为 f,它也可以设置共享文件夹的访问权限。
    • 您需要使用FilePath 属性。将其添加到 ShareSasBuilder 后,您应该能够仅获得一个文件的 SAS 令牌。 HTH。
    猜你喜欢
    • 2017-10-30
    • 2019-06-26
    • 2018-02-09
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多