首页 > 解决方案 > Azure Blob:如何授予移动应用有限访问用户特定数据的权限

问题描述

我有一个连接到网站 (ASP.NET MVC) 的移动应用程序 (Xamarin Android & iOS)。移动应用程序的一些内容(文件和图像)来自当前启用了公共读取访问权限的 Azure Blob 存储。

我正在为应用程序构建一个身份验证模块(OAuth,使用用户名/密码)。是否有可能以某种方式在我的 Azure Blob 帐户中构建身份验证,以便用户只能访问其特定文件?我知道我可以将网站用作中介(即用户验证并连接到网站,网站连接到 azure 并检索数据并将其返回到应用程序),但这会增加额外的延迟步骤,而不是仅连接到 Azure直接滴。

我看到 Azure Blob 支持共享访问签名 (SAS) 令牌。是否可以仅为与该用户相关的文件子集生成 SAS 令牌?我想工作流程是:

  1. 移动应用程序对网站 api 进行身份验证
  2. 网站生成并返回用于 blob 访问的 SAS 令牌
  3. 移动应用程序使用 SAS 令牌直接连接到 azure blob。

这甚至是个好主意吗?还有其他建议吗?

标签: azure-blob-storage

解决方案


根据我对您的方案的了解,您可以使用 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 将很有用。


推荐阅读