微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 存储:如何使用 .NET SDK 生成 SAS 连接字符串

如何解决Azure 存储:如何使用 .NET SDK 生成 SAS 连接字符串

我目前正在使用 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);

但是,这会返回前面带有 ? 的令牌,并且不包括 blob 端点。我正在查看此 documentation 并注意到 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?

解决方法

我相信您正在使用 WindowsAzure.Storage 库。此库已弃用。

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

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

使用 v12 库,我能够获得特定 SASUriblob,并使用 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);
        }
,

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

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

enter image description here

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

不明白为什么要改成这种格式。如果你下一步直接使用sas token,默认结果可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。