mfa*_*nto 8 azure azure-storage-blobs
Azure Blob和共享访问签名过期时遇到问题.我需要授予对blob的访问权限超过1小时(7天),所以我使用了一个命名的容器策略,但不幸的是,这些7天后,我似乎无法生成新的URL.
我有以下代码来创建"默认"策略.请注意,在此代码中,我将过期时间设置为1分钟,以便更容易测试:
CloudStorageAccount account = new CloudStorageAccount(credentials, true);
CloudBlobClient client = new CloudBlobClient(account.BlobEndpoint, credentials);
CloudBlobContainer container = client.GetContainerReference("files");
SharedAccessPolicy sharedAccessPolicy = new SharedAccessPolicy();
sharedAccessPolicy.Permissions = SharedAccessPermissions.Read;
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
BlobContainerPermissions blobContainerPermissions = new BlobContainerPermissions();
blobContainerPermissions.SharedAccessPolicies.Add("default", sharedAccessPolicy);
container.SetPermissions(blobContainerPermissions);
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个SharedAccessSignature网址,其中包含以下内容:
CloudStorageAccount account = new CloudStorageAccount(credentials, true);
CloudBlobClient client = new CloudBlobClient(account.BlobEndpoint, credentials);
CloudBlobContainer container = client.GetContainerReference("files");
CloudBlob blob = container.GetBlobReference(path);
string sas = blob.GetSharedAccessSignature(new SharedAccessPolicy(), "default");
Console.WriteLine(blob.Uri.AbsoluteUri + sas);
Run Code Online (Sandbox Code Playgroud)
这会生成一个url,并且该url在下一分钟(或实际代码中的7天)内正常工作.一分钟结束后,网址无效,不再有效,正如预期的那样.
但是一旦过期,我再次运行代码以生成新的URL.不幸的是,它会生成相同的URL,但仍然无效.
容器策略的开始/结束时间是绝对的,这意味着当我立即设置该策略时:
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
Run Code Online (Sandbox Code Playgroud)
使用该政策的任何内容仅在今天上午10点10分(美国东部时间)至今天上午10:11(美国东部时间)有效吗?
Gau*_*tri 10
您可以做的一件事是创建您的访问策略,没有到期日期.您在创建签名URL时指定了到期日期.
所以你的代码看起来像:
SharedAccessPolicy sharedAccessPolicy = new SharedAccessPolicy();
sharedAccessPolicy.Permissions = SharedAccessPermissions.Read;
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
//sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1); No need to define expiry time here.
BlobContainerPermissions blobContainerPermissions = new BlobContainerPermissions();
blobContainerPermissions.SharedAccessPolicies.Add("default", sharedAccessPolicy);
container.SetPermissions(blobContainerPermissions);
Console.WriteLine("Press any key to continue....");
Console.ReadLine();
CloudBlob blob = container.GetBlobReference(path);
string sas = blob.GetSharedAccessSignature(new SharedAccessPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7),//add expiry date only when you're creating the signed URL
}
, "default");
Console.WriteLine(blob.Uri.AbsoluteUri + sas);
Process.Start(new ProcessStartInfo(blob.Uri.AbsoluteUri + sas));
Console.WriteLine("Press any key to continue....");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
这对你有用吗?显然,您需要在7天后重新生成URL,但不必对访问策略进行任何更改.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
8835 次 |
| 最近记录: |