Azure容器:SetPermissions在几秒钟后工作

时间:2016-07-09 11:05:12

标签: .net azure azure-storage-blobs

我有两个功能: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);
    }

2 个答案:

答案 0 :(得分:1)

更改容器SAS策略最多可能需要30秒才能生效。这既适用于建立新策略,也适用于撤销现有策略。如果重新生成存储帐户密钥也是如此 - 更改最多需要30秒才能生效。

答案 1 :(得分:0)

我不能100%确定存储是否需要一些时间来传播该更改。但是你确定你在异步任务完成后计算3-5秒吗? 也许如果你想确保调用完成,请等待结果:



var task = container.SetPermissionsAsync(permissions);
task.Wait();




您的API不再是异步。