Azure 容器:SetPermissions 在几秒钟后起作用
Azure Container: SetPermissions works after few seconds
我有两个函数:GrantSASAccess 和 RevokeSASAccess。我授予访问权限(通过生成 SAS)将文件上传到 blob。当用户声明 "Ok, I'm done!" 我撤销 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);
}
容器 SAS 策略的更改最长可能需要 30 秒才能生效。这既适用于建立新政策,也适用于撤销现有政策。如果重新生成存储帐户密钥,情况也是如此——更改最多需要 30 秒才能生效。
我不能 100% 确定存储是否不需要一些时间来传播该更改。但是你确定你在计算异步任务完成后的 3-5 秒吗?
也许如果你想确保调用完成等待结果:
var task = container.SetPermissionsAsync(permissions);
task.Wait();
不过您的 API 不再是异步的。
我有两个函数:GrantSASAccess 和 RevokeSASAccess。我授予访问权限(通过生成 SAS)将文件上传到 blob。当用户声明 "Ok, I'm done!" 我撤销 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);
}
容器 SAS 策略的更改最长可能需要 30 秒才能生效。这既适用于建立新政策,也适用于撤销现有政策。如果重新生成存储帐户密钥,情况也是如此——更改最多需要 30 秒才能生效。
我不能 100% 确定存储是否不需要一些时间来传播该更改。但是你确定你在计算异步任务完成后的 3-5 秒吗? 也许如果你想确保调用完成等待结果:
var task = container.SetPermissionsAsync(permissions);
task.Wait();
不过您的 API 不再是异步的。