我在 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);
然后我使用以下内容创建一个 SharedAccessSignature url:
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);
这会生成一个 url,并且该 url 在下一分钟(或实际代码中的 7 天)内正常工作。一分钟结束后,该 url 无效并且不再像预期的那样工作。
但是一旦过期,我再次运行代码以生成一个新的 url。不幸的是,它生成了相同的 url,仍然无效。
容器策略的开始/结束时间是绝对的,这意味着我现在设置该策略时:
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
使用该政策的任何内容仅在今天上午 10:10 (EDT) 至上午 10:11 (EDT) 有效?