AzureBlobと共有アクセス署名の有効期限が切れると問題が発生します。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);
次に、次のようにSharedAccessSignatureURLを作成します。
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は次の1分間(または実際のコードでは7日間)正常に機能します。1分が経過すると、URLは無効になり、期待どおりに機能しなくなります。
しかし、その有効期限が過ぎたら、コードを再度実行して新しいURLを生成します。残念ながら、同じURLが生成されますが、それでも無効です。
コンテナポリシーの開始/終了時間は絶対ですか。つまり、今すぐそのポリシーを設定したときです。
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
そのポリシーを使用しているものは、今日の午前10時10分(EDT)から午前10時11分(EDT)までのみ有効ですか?