【问题标题】:Azure Container: SetPermissions works after few secondsAzure 容器:SetPermissions 几秒钟后工作
【发布时间】:2016-07-09 11:05:11
【问题描述】:

我有两个函数:GrantSASAccess 和 RevokeSASAccess。我授予访问权限(通过生成 SAS)将文件上传到 blob。当用户声明“好的,我完成了!”我撤销 SAS 访问权限。但... 在撤销 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);
    }

【问题讨论】:

    标签: .net azure azure-blob-storage


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      您的 API 不再是异步的。

      【讨论】:

      • SetPermissionsAsync 正在立即执行,但效果在几秒钟后可见。正如 Michal 所写:“容器 SAS 策略的更改最多可能需要 30 秒才能生效”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多