我必须在azure blob中保存图像/视频,然后在我的网站中使用它们。在做了一些研究之后,我发现你必须在href标签中包含blob url,以便从azure中检索图像/视频。
但是,任何人都可以打开网站页面并获取该blob网址并滥用它。该网站还具有用户身份验证,因此只有在登录后,用户才能在网站页面上看到该图像/视频。
有没有其他方法从天蓝色检索blob?或者在开发人员工具中公开显示网址的任何其他解决方案?
我目前正在使用Visual Studio的azure模拟器。
我重新创建了一个Azure函数,它实现了我提到的第一个场景。存储帐户中的Blob URL未公开,容器及其中的所有内容都设置为私有。由于我不知道您的身份验证方案,我现在暂时忽略了这一点,但您可以通过多种方式确保这一点。
这段代码中有一些快捷方式,但你会得到一般的想法。这是代码:
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "files/{id}")]
HttpRequest req, string id, TraceWriter log)
{
var account = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("sitecontent");
var blob = container.GetBlockBlobReference(id);
var stream = new MemoryStream();
await blob.DownloadToStreamAsync(stream);
stream.Seek(0, SeekOrigin.Begin);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
return result;
}
我通过从像这样的HTML文件引用它来测试它:
<img src="http://localhost:7071/api/files/techdays2017.jpg" alt="Me at TechDays 2017" />
我使用的图像是267KB,当使用存储模拟器进行本地测试时,函数的响应时间都<200 ms。
不确定问题是否有效,但另一个非常简单的方法可能是
如果你需要完全隐藏结构,所有步骤都可以用于与@rick回答中提到的功能结合。
有一点需要理解,视频流需要转到浏览器播放器,因此不能有任何完美的计划。上述选项也只是限制访问时间。可能还有一些其他选项,如消息层加密,服务器通过加密内容发送它,并且它将在运行时解密您需要有一些自定义播放器功能,这可能会导致服务器端更高的费用。
如果他有技能和高动力,即使这不会盗用视频用户,但是可以以某种方式使其变得困难,这应该是驱动点。
参考:https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1