azure - 在 Azure Blob 存储中创建用户之间逻辑分离的最佳方法
问题描述
我试图了解云存储如何与 Azure Blob 存储一起使用。用例是一个微服务架构,带有一些 API 和一个用户可以上传、下载和删除 Blob 的前端。
我有两种类型的 blob,一种是所有用户都可以访问的个人资料图片和资产,另一种是用户拥有所有权并且只有某些用户可以查看/下载的 blob(同一公司的用户,网站管理员...)。
我们有 3 个概念,我试图找出目的:
- 存储帐户,即我,Azure 帐户持有者。
- 容器,可为每个实体/用户使用一个。
- 斑点
上传 blob 只能使用我的微服务架构的前端,因此身份验证将是服务与我要构建的新服务的服务。
下载 blob,它将暴露一个 URL,并且(这里开始怀疑)当用户单击 URL 时,我将检查 AuthService 是否用户记录了会话(如果没有,则重定向到登录前端),然后我需要请求用户是否有权下载此 blob。
我怎样才能做到这一点?
我考虑点击 URL,使用 AuthService 检查用户是否已登录,下载服务询问用户信息,然后检查 blob 元数据什么是 blob 所有权。这需要在上传过程中将信息存储到 entity_id、user_id 等元数据中。我不知道...
解决方案
您是否考虑在前端实现 API/功能以生成用户应该有权访问的特定 blob 的 SAS URL?这样,此 API 可以根据您的意愿验证用户权限,并且如果用户的请求签出,您可以向他提供 SAS URL,该 URL 将在您选择时过期,并且可以对特定 blob 进行读/写/删除(您选择)。
此外,我强烈建议将保存完全在系统内部的系统数据的存储帐户与用户可访问的 blob 的存储帐户分开。这变成了 SAS URL 确实包含存储帐户 DNS,这会将其暴露给 DDOS 和其他基于 DNS 的攻击,因此在我看来,您应该将其范围限制为仅允许用户访问所需的 blob。
推荐阅读
- html - 输入元素(由 vuetify 生成)不会为长文本换行
- php - 如何在 php 中使用 http 身份验证 cURL SSL URL?
- autodesk-forge - 使用 Revit API 和设计自动化从模板文件创建项目文件
- laravel - Laravel Eloquent 是否支持回调?
- c# - c#解方程到未知参数
- python - Python - 如何将列映射到字母序列?
- appium - Appium中的Press和Tap触摸动作之间的区别?
- node.js - Node.js 如何知道在 views 文件夹中渲染 ejs
- c# - Dialogflow - 检测意图冻结 - C#
- postgresql - 如何从不同的数据库恢复模式和仅数据备份