我正在寻找使用azure Containers和Blobs来存储我网站的图像和视频。我发现http://msdn.microsoft.com/en-us/library/windowsazure/dd179354.aspx讨论了不同的ALC设置,但它没有回答我的一个问题。如果Container / Blob设置为“No public read access”,则该站点表示只有帐户所有者才能读取数据。这是否意味着人们无法通过URL访问它,但我在Azure VM上托管的MVC Web App可以通过URL访问它?
答案 0 :(得分:3)
如果答案听起来有点讲道,请耐心等待。不必要的冗长:)
基本上,Windows Azure中的每个资源(Blob容器,Blob)都有一个唯一的URL,可通过REST API访问(因此可通过http / https协议访问)。 Wit ACL,您基本上告诉存储服务是否遵守为服务资源而发送的请求。要阅读有关身份验证机制的更多信息,您可能会发现此链接很有用:http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx。
当您将ACL设置为No public read access
时,您将指示存储服务不要遵守任何匿名请求。只有经过身份验证的请求才会受到尊重。要创建经过身份验证的请求,您需要使用您的帐户名和密钥,并创建一个授权标头,该标头随访问请求一起传递。如果您的请求中没有此授权标头,则该请求将被拒绝。
长话短说,回答你的问题即使你的MVC应用程序也无法通过URL访问blob,除非请求中包含该授权标题。一种可能性是探索blob存储中的Shared Access Signature (SAS)
功能。这将为存储中的blob提供有时间限制的受限权限。因此,您要做的是使用您的帐户名和密钥在MVC应用中为您的blob创建一个SAS URL,并在应用程序中使用该SAS URL。
为了进一步解释ACL的概念,我们假设您有一个名为mycontainer
的blob容器,并且在名为myblob.txt
的存储帐户中有一个名为myaccount
的Blob。要在容器中列出blob,容器URL将为http://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list
,blob URL为http://myaccount.blob.core.windows.net/mycontainer/myblob.txt
。当您尝试使用不同的ACL直接通过浏览器访问这些URL时,将会出现以下行为:
无公开读取权限
容器网址 - 错误
Blob网址 - 错误
仅限blob的公开读取权限
容器网址 - 错误
Blob URL - 成功(将下载blob)
完全公开阅读权限
容器URL - 成功(将显示包含容器中所有blob信息的XML文档)
Blob URL - 成功(将下载blob)