问题描述
我使用Azure Blob Storage Client Libary v11 for .Net。
我编写了一个程序,客户可以用来上传文件。我为客户生成了一个带有SAS令牌的URL(有效期为x天),客户可以使用该程序上传文件。这是一个示例网址:
useEffect(() => {
handleCollapsibleViewPort();
},[collapsed]);
const handleCollapsibleViewPort = () => {
if(uncollapsedHeight !== 0 && collapsibleRef.current.clientHeight > uncollapsedHeight ) {
scrollElementToTop(collapsibleRef.current.getBoundingClientRect().top);
}
}
在开始上载之前,如何确定SAS令牌是否仍然有效?
更新:
https://storage.blob.core.windows.net/123456789?sv=2019-07-07&sr=c&si=mypolicy&sig=ASDH845378ddsaSDdase324234234rASDSFR
解决方法
通常SAS
令牌包含se
字段,您可以根据SAS
字段确定se
令牌何时到期。
在下面的示例中,SAS令牌的到期时间为2020-09-03T16:17:28Z
?sv = 2019-12-12&ss = bfqt&srt = sco&sp = rwdlacupx&se = 2020-09-03T16:17:28Z&st = 2020-09-02T08:17:28Z&spr = https&sig =
您可以参考此官员document。
如果没有像您提供的se
令牌那样包含SAS
字段,那么我认为无法直接确定它何时到期。
我自己找到了解决方案。该blog描述了两个不同的ShardedAccessSignature。我已经修改了代码,以便现在在URL中也拥有se声明。
解决方案:
protected void GetSharedAccessSignature(
String containerName,String blobName)
{
CloudStorageAccount cloudStorageAccount =
CloudStorageAccount.FromConfigurationSetting(“DataConnectionString”);
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer =
new CloudBlobContainer(containerName,cloudBlobClient);
CloudBlockBlob cloudBlockBlob =
cloudBlobContainer.GetBlockBlobReference(blobName);
SharedAccessPolicy sharedAccessPolicy = new SharedAccessPolicy();
sharedAccessPolicy.Permissions = SharedAccessPermissions.Read;
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-10);
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(40);
String sharedAccessSignature1 =
cloudBlockBlob.GetSharedAccessSignature(sharedAccessPolicy);
String sharedAccessSignature2 =
cloudBlockBlob.GetSharedAccessSignature( new SharedAccessPolicy(),“adele”);
}
sharedAccessSignature1包含se声明。 在我最初的问题代码中,我使用了sharedAccessSignature2。