Azure Blob:如何授予移动应用程序对用户特定数据的有限访问权限

时间:2020-09-21 23:41:12

标签: azure-storage-blobs

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

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

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

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

那会是个好主意吗?还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

据我对您的方案的了解,您可以使用Azure AD或SAS对Blob存储进行身份验证/授权。关键是按容器组织用户的数据,以便您可以限制对该容器的访问。这种类型的设计将与当今在Azure存储中处理授权的方式最匹配。

例如,您将为用户1的数据创建一个容器,为用户2的数据创建另一个容器,等等。

如果您已经在使用Azure AD对应用程序进行用户身份验证和授权,则可以简单地为每个用户分配一个以用户容器为范围的RBAC角色。例如,您可以将存储Blob数据贡献者角色分配给容器1的用户1,然后对容器2上的用户2进行相同的操作。有关如何在Azure门户中执行此操作的信息,请参见Use the Azure portal to assign an Azure role for access to blob and queue data。您还可以使用PowerShell或Azure CLI。

请注意,RBAC角色不能仅作用于单个Blob,而只能作用于容器级别或更高级别。

如果确定需要使用SAS,则可以为受限于其容器的每个用户创建SAS。如果您的用户已经通过Azure AD对应用程序进行身份验证/授权,则您可能不需要使用SAS。如果您需要向未经身份验证的用户授予访问权限,则SAS很有用。