Azure存储:如何使用.NET SDK生成SAS连接字符串
我当前正在使用Microsoft.WindowsAzure.Storage.CloudStorageAccount类生成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
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);
}