我有两个功能:GrantSASAccess和RevokeSASAccess。我授权访问(通过生成SAS)将文件上传到blob。当用户声明“好的时候,我已经完成了!”我撤销SAS Access。但... 在撤销SAS片刻之后,用户仍然可以访问上传文件。仅在3-5秒后它就会正常阻塞。为什么这样?如何防止这种情况?
public async Task GrantSASAccess(CloudBlobContainer container)
{
BlobContainerPermissions permissions = await container.GetPermissionsAsync();
permissions.SharedAccessPolicies[container.Name] = new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Write,
SharedAccessExpiryTime = _dateTimeService.GetUtcNow().AddMinutes(Core.ConfigurationHelper.GetSASExpirationTime())
};
await container.SetPermissionsAsync(permissions);
}
public async Task RevokeSASAccess(StorageCredentials storageCredentials, string containerName, string policyName)
{
CloudBlobContainer container = GetContainerReference(storageCredentials, containerName);
BlobContainerPermissions permissions = container.GetPermissions();
permissions.SharedAccessPolicies.Remove(containerName);
await container.SetPermissionsAsync(permissions);
}
答案 0 :(得分:1)
更改容器SAS策略最多可能需要30秒才能生效。这既适用于建立新策略,也适用于撤销现有策略。如果重新生成存储帐户密钥也是如此 - 更改最多需要30秒才能生效。
答案 1 :(得分:0)
我不能100%确定存储是否需要一些时间来传播该更改。但是你确定你在异步任务完成后计算3-5秒吗? 也许如果你想确保调用完成,请等待结果:
var task = container.SetPermissionsAsync(permissions);
task.Wait();

您的API不再是异步。