azure-blob-storage - Azure Blob:如何授予移动应用有限访问用户特定数据的权限
问题描述
我有一个连接到网站 (ASP.NET MVC) 的移动应用程序 (Xamarin Android & iOS)。移动应用程序的一些内容(文件和图像)来自当前启用了公共读取访问权限的 Azure Blob 存储。
我正在为应用程序构建一个身份验证模块(OAuth,使用用户名/密码)。是否有可能以某种方式在我的 Azure Blob 帐户中构建身份验证,以便用户只能访问其特定文件?我知道我可以将网站用作中介(即用户验证并连接到网站,网站连接到 azure 并检索数据并将其返回到应用程序),但这会增加额外的延迟步骤,而不是仅连接到 Azure直接滴。
我看到 Azure Blob 支持共享访问签名 (SAS) 令牌。是否可以仅为与该用户相关的文件子集生成 SAS 令牌?我想工作流程是:
- 移动应用程序对网站 api 进行身份验证
- 网站生成并返回用于 blob 访问的 SAS 令牌
- 移动应用程序使用 SAS 令牌直接连接到 azure blob。
这甚至是个好主意吗?还有其他建议吗?
解决方案
根据我对您的方案的了解,您可以使用 Azure AD 或 SAS 对 Blob 存储进行身份验证/授权。关键是按容器组织用户的数据,以便您可以限制对该容器的访问。这种类型的设计将最符合当今 Azure 存储中处理授权的方式。
例如,您将为 user1 的数据创建一个容器,为 user2 的数据创建另一个容器,依此类推。
如果您已经在使用 Azure AD 对您的用户进行身份验证和授权以使用您的应用程序,那么您可以简单地为每个用户分配一个作用域为用户容器的 RBAC 角色。例如,您可以将存储 Blob 数据参与者角色分配给容器 1 的用户 1,然后对容器 2 上的用户 2 执行相同操作。有关如何在 Azure 门户中执行此操作的信息,请参阅使用 Azure 门户分配 Azure 角色以访问 Blob 和队列数据;您还可以使用 PowerShell 或 Azure CLI。
请注意,RBAC 角色不能限定为单个 blob,而只能在容器级别或更高级别。
如果您确定需要使用 SAS,您可以为每个用户创建一个仅限于其容器的 SAS。如果您的用户已经在使用 Azure AD 对您的应用程序进行身份验证/授权,那么您可能不需要使用 SAS。在您需要授予未经其他身份验证的用户访问权限的情况下,SAS 将很有用。
推荐阅读
- javascript - 我想从本地存储中删除一个项目
- android - 如何在 Textview 中显示整个内容,如屏幕截图所示,左右滚动而不是顶部底部?
- vba - 如何删除excel最后一行后的5行?
- macos - macosx上unixodbc的odbc ini配置文件的默认位置在哪里?
- ruby-on-rails - 如何仅显示 Twilio 错误消息的描述部分?
- python - 如何在 Python 中编写缓存函数或等效函数?
- git - Git diff 命令文档
- amazon-web-services - 是否有可能达到 Lambda 调用限制(10000)而不达到其并发限制(1000)?
- java - RecyclerView 的 SearchView 不起作用
- html - 我的网站无法显示 firebase 实时数据库数据