Azure文件存储:经过身份验证的直接下载

时间:2016-04-06 07:28:22

标签: asp.net-mvc azure azure-storage azure-storage-blobs

我有一个基于ASP.Net MVC(托管在VM或Azure WebApp上),Azure文件存储和ASP.Net身份提供程序构建的解决方案,用于身份验证。

该解决方案涉及从服务器上传和下载大量文件。

在下载文件之前,必须首先在服务器上进行一些身份验证。

目前我的解决方案实现如下:

  1. 登录用户点击下载链接/按钮,HTTP请求将发送到服务器。
  2. ASP.Net MVC控制器方法验证并授权特定用户下载。
  3. 控制器方法从Azure文件存储
  4. 将文件从文件存储下载到服务器上
  5. 该文件从服务器流式传输到登录用户。
  6. 我从上述方法中注意到它有以下缺点:

    • 在此过程中耗尽了大量服务器资源,包括内存,磁盘I / O,处理能力。
    • 它会在Web服务器内外产生大量网络流量。
    • 上述结果是,由于上述两点,我的解决方案需要更大的定价等级

    如果我可以在从Web服务器/控制器方法授权请求后以某种方式建立从文件存储到客户端/用户的直接下载,则可以规避上述大部分内容。

    我提出的解决方案是在请求获得授权后立即在请求的文件上生成SAS(共享访问签名)(使用寿命很短),然后将客户端重定向到直接下载URL SAS。

    我有什么理由不使用这种方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

  

我提出的解决方案是生成SAS(共享访问权限)   签名)在请求的文件(短寿命)上尽快   请求已被授权,然后将客户端重定向到   使用SAS直接下载URL。

我认为这是一个很好的方法。这种方法克服了你提到的所有缺点。

  

我有什么理由不使用这种方法,或者在那里   有没有更好的方法?

除了保持SAS短命(你正在做的事情)之外,还有一些我能想到的事情。看看它们是否对你有意义:

  • 在SAS中包含IP地址ACL 。这样可以防止用户共享SAS URL,因为SAS URL只能使用其中定义的IP地址。
  • 强制下载。您可以覆盖SAS中的content-disposition标头,以便自动下载文件,而不是将其留给用户下载文件。