C# - Azure Blob SAS密钥格式不正确

23c0lvtd  于 2023-10-22  发布在  C#
关注(0)|答案(1)|浏览(139)

我正在设置一个脚本,可以为我们组织中的不同用户生成SAS密钥,以访问不同的文件。我使用Azure SDK获取blob并基于找到的blob客户端生成密钥。在设置了BlobSasBuilder并生成了Uri并转到它之后,我得到了一个签名格式不好的认证错误。我已经验证了blob是有效的,可以通过门户网站使用授权帐户访问,但我不知道我还能做什么。
下面是我目前的SAS测试代码:

static void Main(string[] args)
{
    StorageSharedKeyCredential keyCredential = new StorageSharedKeyCredential(accountName, accountKey);
    BlobServiceClient serviceClient = new BlobServiceClient(new Uri($"https://{accountName}.file.core.usgovcloudapi.net"), keyCredential);

    BlobClient blobClient = serviceClient.GetBlobContainerClient("account-data").GetBlobClient("ADImport.csv");
    Uri sasURL = CreateServiceASBlob(blobClient);

    Console.WriteLine(sasURL);
    Console.ReadLine();
}

public static Uri CreateServiceASBlob(BlobClient blobClient)
{
    if (blobClient.CanGenerateSasUri)
    {
        BlobSasBuilder sasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
            BlobName = blobClient.Name,
            Resource = "b",
            StartsOn = DateTimeOffset.UtcNow.AddHours(-1),
            ExpiresOn = DateTimeOffset.UtcNow.AddDays(1)
        };
        
        sasBuilder.SetPermissions(BlobAccountSasPermissions.Read);

        return blobClient.GenerateSasUri(sasBuilder);
    }

    return null;
}

到目前为止,我已经尝试生成查询参数并附加到URL,但没有成功。我期待下载事件发生上传访问链接,但一直没有成功这样做。沿着我的谷歌搜索提供的代码没有取得任何成功,我将感谢任何额外的帮助。

7tofc5zh

7tofc5zh1#

我猜你的目标文件是Azure文件的文件,因为你的存储帐户是*.file.core.usgovcloudapi.net
如果你想为Azure文件(而不是blob)生成SAS,请使用Azure.Storage.Files.Shares

示例代码

var fsc = new Azure.Storage.Files.Shares.ShareClient("<your storage connection string", "<your share name>");
        var fd = fsc.GetDirectoryClient("<directory path>");
        var f = fd.GetFileClient("<file name>");

        var fileSasBuilder = new ShareSasBuilder(ShareFileSasPermissions.Read,
            DateTimeOffset.UtcNow.AddDays(1))
            {
                ShareName = "<share name>",
                FilePath = "<directory and file path>"
            };
        
        var fileUrlWithSAS = f.GenerateSasUri(fileSasBuilder);

相关问题