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

Azure存储:如何使用.NET SDK生成SAS连接字符串,azure,azure-storage,azure-storage-blobs,shared-access-signatures,Azure,Azure Storage,Azure Storage Blobs,Shared Access Signatures,我当前正在使用Microsoft.WindowsAzure.Storage.CloudStorageAccount类生成SAS令牌,如下所示: var cloudStorageAccount = // create a new CloudStorageAccount var sharedAccessAccountPolicy = new SharedAccessAccountPolicy { Permissions = SharedAccessAccountPermissions.Rea

我当前正在使用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端点。我正在看这个,注意到SAS如下所示:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D
这样做的好处是,我可以将其用作连接字符串,直接初始化
BlockBlobClient


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

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

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


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

我相信您使用的是
WindowsAzure.Storage
库。此库已弃用

建议使用的库是(v12)

使用v12库,我能够为特定的
blob
获取
SASUri
,并使用
SASUri
创建
BlobClient
来下载该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);
        }

这是在服务器端生成的,看起来Azure Functions v3运行时仍然使用不推荐使用的库。我可能需要拉入v12的nuget,但这会增加输出DLL的大小,从而增加冷启动时间:|哎呀!刚刚尝试创建一个Azure功能v3,它是由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);
        }