0

我目前正在使用这样的Microsoft.WindowsAzure.Storage.CloudStorageAccount类生成 SAS 令牌:

var cloudStorageAccount = // create a new CloudStorageAccount
var sharedAccessAccountPolicy = new SharedAccessAccountPolicy
{
    Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write,
    Services = SharedAccessAccountServices.Blob,
    ResourceTypes = SharedAccessAccountResourceTypes.Object,
    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),
    Protocols = SharedAccessProtocol.HttpsOnly
};

var token = cloudStorageAccount.GetSharedAccessSignature(sharedAccessAccountPolicy);

但是,这会返回一个?前面带有 a 的令牌,并且不包括 blob 端点。我正在查看此文档并注意到 SAS 如下所示:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

这样做的好处是我可以将它用作连接字符串来直接初始化BlockBlobClient.

如何以上述格式生成我的令牌?我可以解析我自己的并删除?然后添加BlobEndpointSharedAccessSignature键,但这是手动工作,将来可能无法正常工作。是否有一种 SDK 方法可以按照 Microsoft 文档中显示的格式创建 SAS?

4

2 回答 2

1

我相信你正在使用WindowsAzure.Storage图书馆。此库已弃用。

https://www.nuget.org/packages/WindowsAzure.Storage/

推荐使用的库是https://www.nuget.org/packages/Azure.Storage.Blobs (v12)

使用 v12 库,我能够获得SASUri一个特定的blob并创建一个BlobClient使用SASUri来下载该 blob 而无需字符串格式化。

 BlobClient blobClient = new BlobClient("storage account conn string", "container name", "blob name");
        BlobSasBuilder blobSasBuilder = new BlobSasBuilder(BlobSasPermissions.Write | BlobSasPermissions.Read, DateTimeOffset.Now.AddDays(1))
        {
            BlobContainerName = blobClient.BlobContainerName,
            BlobName = blobClient.Name
        };

        var sasuri = blobClient.GenerateSasUri(blobSasBuilder);

        var blobClientWithSasUri = new BlobClient(sasuri);
        using (var fileStream = System.IO.File.OpenWrite(@"path to download"))
        {
            blobClientWithSasUri.DownloadTo(fileStream);
        }
于 2020-12-31T14:47:16.967 回答
0

您似乎使用此示例来创建帐户 SAS。它返回 的值SharedAccessSignature

并且没有 SDK 可以获取上述 SAS 令牌格式,即使是最新的 SDK(azure.storage.blobs 12.7.0)。我尝试了 azure.storage.blobs,它返回了没有“?”的 SharedAccessSignature。恐怕你需要自己格式化。

在此处输入图像描述

Console.WriteLine($"BlobEndpoint=https://{accountName}.blob.core.windows.net;SharedAccessSignature={sasToken}");

我不明白为什么需要将其更改为这种格式。如果只是在下一步中使用 sas 令牌,默认结果可以正常工作。

于 2020-12-31T14:18:15.347 回答