允许从应用服务访问 Azure 存储中的 Blob 以显示在浏览器中

问题描述 投票:0回答:2

我有一个不允许公共访问的 Blob 存储帐户。因此,图像容器是私有的并包含图像。

应用服务运行并托管 Razor Pages Web 应用。 Web 应用程序具有系统管理的标识,并使用

DefaultAzureCredentials
来避免应用程序设置中的密钥,并且可以作为 Blob 贡献者角色访问存储帐户。

通过此配置,通过 azure b2c 进行身份验证的用户能够按照预期将文件上传到存储、列出文件、删除、读取和设置元数据等。但是,当我从

BlobClient
检索 blob(图像)Uri 并将其显示在 cshtml 文件中时,我收到 409 状态代码。

换句话说,在服务器上进行的所有操作都正常工作,但存储帐户拒绝在来自该应用程序的浏览器的 Get 请求中显示图像。对于 localhost 和生产中的 url 来说都是如此。

我相信应用程序服务有权访问数据,因此可以检索给定图像的 url,但随后是浏览器发出请求,因此被存储帐户拒绝。

我想知道如何在不使用 SAS 令牌的情况下解决这个问题(它们确实有效)。换句话说,我想知道是否有可能:

    粘贴到浏览器网址栏中时,或从简单的卷曲中,禁止从网址
  1. xyz.azurewebsites.net

    获取。

    
    

  2. 从网站获取数据时允许将图像发送到浏览器(例如考虑 Referer 标头?)。
  3. 这可能吗?如何实现?

编辑:我发现了相关问题,但除了指向 SAS 令牌之外,它们已经过时且不具说服力。 SAS 的限制在于,任何获得该 URL 的人都可以读取该 URL,而不仅仅是登录用户。非常欢迎解决方案,希望自从这些问题发布在

here

here以来已经取得了一些进展。

azure-blob-storage azure-managed-identity
2个回答
1
投票

嗯,当您使用浏览器时,它不会自动添加 auth 标头。

如果没有身份验证信息,您无权访问受保护的内容。

您可以为 Blob 存储生成 SAS,并将 SAS 附加到您的 url 中以访问内容。

一种解决方法(这不是完美的解决方案)是您可以设置 SAS 令牌的生命周期,并且客户端需要定期更新 SAS 令牌。

(我在微软Azure SDK团队工作)


0
投票
data URL

来显示图像。 示例:

https://xyz.blob.core.windows.net/images/image1.jpg

© www.soinside.com 2019 - 2024. All rights reserved.