【发布时间】:2020-08-07 22:31:10
【问题描述】:
我在 Azure blob 容器中有多个包含用户配置文件信息的 json 文件,并且我有一个 Angular 应用程序,它调用 Azure blob 容器并获取所有这些 json 文件。每个 json 文件都有自己的 url,例如 https://{accountName}/profiles/{filename}。我正在缓存这些 url,而不是在每次刷新时生成每个 url。现在的问题是容器数据具有公共访问级别,任何拥有此 url 的人都可以访问文件。
一种方法是使用 SAS(共享访问签名)令牌并在特定时间间隔后使 url 过期,但在我的情况下,这将对性能产生巨大影响。因为我必须一次又一次地为所有文件生成令牌。而且我不能在我的 Angular 应用程序中公开秘密访问密钥,所以我必须编写一个可以完成这项工作的 api。
还有其他方法吗?我的 Angular 应用程序部署为 Kubernetes 集群 (AKS) 上的 docker 容器
我找到了这个链接https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-requests-to-azure-storage,但对我来说似乎没什么帮助。
【问题讨论】:
-
Because I have to generate token for all files again and again.- 不一定。您可以为容器生成 SAS 令牌并将该令牌用于该容器中的所有文件。 -
那么,这是最好的方法吗?
-
在不知道更多细节的情况下,我会说是的。但是,我不清楚您为什么不愿意进行 API 调用以即时为单个文件生成 SAS 令牌?考虑到创建 SAS 令牌的功能不会向 Azure 存储发出网络请求,它应该是对 API 端点的快速调用。
-
您可以使用 Azure Function 作为 API 端点,而不是创建长时间运行的 API 服务器。请记住,您网站上的任何人仍然可以向 API 发出这些请求。因此,如果您需要确保一个用户无法获取其他用户的数据,则需要额外的保护。
-
在您的 Blob 上,您可以添加元数据来标识文件属于谁。获取文件的 API 需要 auth0 令牌。在 API 中,您从令牌中获取用户标识符,确认令牌有效,然后确认此用户可以访问所请求的文件。如果可以,您可以创建一个 SAS 令牌,假设 1 小时,然后返回用户重定向到带有 sas 令牌的 blob。您将响应缓存 1 小时,这样如果用户再次请求相同的文件,浏览器将立即重定向到之前的 url,而无需实际调用 API。
标签: angular azure azure-blob-storage