2016-10-02 336 views
0

我有一个使用Azure Blob存储来存储文档和图像的Web应用程序(ASP.NET MVC)。每个用户都有对blob的特定访问权限,并且此 存储在Web应用程序的数据库中。使用SAS的Azure Blob存储授权

目前我有一个快速的临时解决方案,它使用Web应用程序作为运行授权的中间层,并且如果客户端具有读取BLOB的权限, 它首先从Azure中检索,然后交付给客户端。这当然不是由于许多原因而进行的最佳方式。

我已经开始使用SAS(共享访问签名)重建此部分,但无法找到设置系统的良好来源,该系统可随着用户和文件数量的增长而很好地扩展。我期待的用户数量约为100个,斑点数量约为100000.

正如我所看到的,我有两个选择。

1)所有文件都有一个存储在Web应用程序数据库中的签名,这用于所有有权访问该文件的用户。这将是简单的方法, 但是,如果用户由于某种原因不能访问文件,他们仍然可以访问文件,如果他们有早期访问的链接。

2)对于每个有权访问该文件的用户,所有文件都有特定的签名。这将使撤销对文件的访问变得容易,但签名的数量将会很大,并且会产生任何副作用吗?

还有其他选择吗?

对此的任何想法都非常感谢!

+1

是否有一个原因,你没有考虑创建SAS和当它需要? –

+0

我想你的意思是SAS将被生成并添加到传递给客户端的HTML中的URL中?这当然是一种选择,但对于图像,它们将以缩略图(也存储在Azure Blob存储中)列出,所以如果我在页面上有20个图像,这意味着要在Azure之前生成20个往返才能生成签名渲染。对? – moccasine

+0

您可以参考我的答案:http://stackoverflow.com/questions/39431608/limiting-account-sas-permission-to-specific-files-in-azure-storage/39432023#39432023 –

回答

0

与其为每个用户提供SAS,最好是按角色对文件进行分组,并将用户映射到与用户数量无关的容易缩放的角色。

不建议您直接访问用户blob,因为您想通过应用程序分发blob内容。因此,提供具有特定用户角色的应用程序访问权限。

请参阅以下关于生成双分钟SAS的文章,该文章将在两分钟内过期,以便您链接的用户长时间无法访问图像。

http://www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

希望这会有所帮助。 :)

+0

感谢您的回答。使用两分钟的SAS将是一个想法,但这意味着对于显示20个缩略图的页面而言,这意味着要向Azure生成20个往返才能生成签名。如果我可以将文件分组并在群组上设置签名,那将是一件好事,但目前只能在容器级别上正确完成这项工作?然后,我必须创建> 100个容器才能在访问组之后对文件进行分组。那不觉得正确的路要走? – moccasine