Tengo problemas con Azure Blobs y las firmas de acceso compartido cuando caducan. Necesito otorgar acceso a un blob por más de 1 hora (7 días), así que estoy usando una política de contenedor con nombre, pero desafortunadamente parece que no puedo generar nuevos urls una vez que esos 7 días terminan.Firma de acceso compartido de contenedor de blobs azul que expira
Tengo el siguiente código para crear la política "predeterminada". Nota En este código, Soy la creación de la expiración de 1 minuto a partir de ahora, para que sea más fácil de prueba:
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);
entonces crear una URL SharedAccessSignature con lo siguiente:
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);
Este genera una url y la url funciona correctamente durante el siguiente minuto (o 7 días en el código real). Una vez que ha pasado el minuto, la url no es válida y ya no funciona, como se esperaba.
Pero una vez que la expiración ha pasado, ejecuto el código nuevamente para generar una nueva url. Desafortunadamente, genera la misma url, que aún no es válida.
son los tiempos de inicio/final de las políticas de contenedores absoluta, es decir, cuando me puse que la política en este momento:
sharedAccessPolicy.SharedAccessStartTime = DateTime.UtcNow;
sharedAccessPolicy.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1);
cualquier cosa usando que la política sólo es válida a partir de las 10:10 am (EDT) a 10:11 (EDT) hoy?
Así que los tiempos de inicio/final de las políticas de contenedores son absolutos. Yo también pensé que eran parientes. – nmit026