我想使用共享访问签名( SAS )下载blobs。
我还希望能够删除活动的SAS URI,如果我正确理解它,我必须为此使用存储的访问策略。
令我困惑的是,我如何才能取消一项政策。我还读到你只能有5个存储访问策略激活吗?
我在这里的目标是能够删除一个活动的SAS URI。实现这一点的唯一方法是删除与SAS URI链接的策略,对吗?如果我在我的blob存储中有超过数百个文件,我如何才能使它工作呢?我不能为每个blob制定一个策略,对吗?5是最大的策略吗?
此代码演示如何添加策略,以及如何创建使用此策略的SAS URI,用户可以从该策略下载此策略。
static void CreateSharedAccessPolicy(CloudBlobContainer container)
{
//Create a new stored access policy and define its constraints.
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
};
//Get the container's existing permissions.
BlobContainerPermissions permissions = new BlobContainerPermissions();
//Add the new policy to the container's permissions.
permissions.SharedAccessPolicies.Clear();
permissions.SharedAccessPolicies.Add("PolicyName", sharedPolicy);
container.SetPermissions(permissions);
}
static string GetBlobSasUriWithPolicy(CloudBlobContainer container, string policyName)
{
//Get a reference to a blob within the container.
CloudBlockBlob blob = container.GetBlockBlobReference("file_name");
//Generate the shared access signature on the blob.
string sasBlobToken = blob.GetSharedAccessSignature(null, "PolicyName");
//Return the URI string for the container, including the SAS token.
return blob.Uri + sasBlobToken;
}最后一个问题,我如何删除一个政策?它是否简单到:
permissions.SharedAccessPolicies.Remove("PolicyName");发布于 2014-12-19 12:50:14
我在这里的目标是能够删除一个活动的SAS URI。实现这一点的唯一方法是删除与SAS URI链接的策略,对吗?
部分正确。删除访问策略是一种方法。其他方法是更改策略的名称(策略标识符)。例如,如果策略标识符是mypolicy,那么将其更改为mypolicy1将具有与删除策略相同的效果。
如果我在我的blob存储中有超过数百个文件,我如何才能使它工作呢?
您可能已经知道,访问策略是在blob容器级别而不是在blob级别定义的。删除/使访问策略无效将使容器中所有blobs的SAS失效。
我不能为每个blob制定一个策略,对吗?5是最大的策略吗?
这是正确的。
最后一个问题,我如何删除一个政策?它是否像: permissions.SharedAccessPolicies.Remove("PolicyName");那样简单?
这是正确的。不过,一定要把它存回去。您可以使用以下内容:
var cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("container-name");
var containerPermissions = container.GetPermissions();
containerPermissions.SharedAccessPolicies.Remove("access-policy-id");
container.SetPermissions(containerPermissions);https://stackoverflow.com/questions/27549988
复制相似问题