用于访问Azure存储中的私有blob的URL

时间:2017-11-03 08:00:02

标签: c# azure blob azure-storage azure-storage-blobs

我们刚开始使用Azure存储。 在我们的场景中,我们上传到私人blob,我们稍后需要直接从我们的客户端应用访问,例如图像。

有没有办法使用包含访问密钥的URL来解决Azure存储中的私有blob?

通过MS文档进行筛选我到目前为止找到的只是通过blob URI进行简单的URL访问,例如:通过.net API列出blob时由URI实例的CloudBlockBlob属性给出的。

由于blob不公开,自然从Web浏览器访问它会失败 但是,我们是否可以限定URL以包含访问密钥以允许授权客户端访问blob ..?

2 个答案:

答案 0 :(得分:2)

这是您从存储中读取blob的API:

https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob

没有URL-Parameter传递访问密钥,只有标头值Authorization。因此,您可以手动执行请求,例如将结果数据添加为base64编码图像。如果可能的话,我会反对它。

您还必须意识到,通过将您的访问密钥传递给客户端,您无论如何都在有效地使您的blob公开。您将使您的数据比匿名访问更具风险,因为访问密钥允许比匿名访问更多的操作。这也适用于你的objective-c应用程序,即使它在那里更加模糊。 SAS是实现目标的方式 - 创建后端服务,为给定资源创建一组定义的SAS令牌。然而,这比在某处简单地混淆完整访问密钥要多得多。

请参阅“匿名用户可用的功能”:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-access-to-resources

答案 1 :(得分:2)

您可以为私有 blob 生成 SAS URL 和令牌。以下是在 Azure 门户中手动生成此内容以测试概念的过程。即使您的存储容器是私有的,它也能正常工作,因为它允许使用在查询字符串中包含令牌的 URL 对文件进行临时的、有时间限制的访问。

单击存储容器中的文件,选择“生成 SAS”选项卡,然后在右侧窗格中选择 enter image description here

这将生成一个令牌和一个包含令牌的 URL,如下所示:

enter image description here

您可以使用 curl 测试将 URL 作为文件下载。使用上图中显示的第二个 URL(在查询字符串中包含完整标记和其他参数的 URL),然后执行此操作(重要 - URL 必须用双引号括起来):

curl "<YOUR_URL>" --output myFileName.txt

提示 - 如果出于任何原因需要直接在 VM 上安装文件(我需要这样做以安装一个SSL 证书),您可以在 VM 本身上生成 URL,然后 curl 以下载文件。例如。首先使用 Bastion 或 SSH 连接到 VM,然后使用 curl 将文件下载到某处。