我有一个连接到网站(ASP.NET MVC)的移动应用程序(Xamarin Android和iOS)。移动应用程序的某些内容(文件和图像)来自当前启用了公共读取访问权限的Azure Blob存储。
我正在为应用程序(OAuth,带有用户名/密码)构建身份验证模块。是否可以通过某种方式在我的Azure Blob帐户中建立身份验证,以便用户只能访问其特定文件?我知道我可以将网站用作中介(即,用户进行身份验证并连接到网站,网站连接到azure并检索数据并将其返回给应用程序),但这将增加额外的延迟,而不是仅连接到Azure直接Blob。
我看到Azure Blob支持共享访问签名(SAS)令牌。是否可以仅为与该用户相关的文件子集生成SAS令牌?我想工作流程将是:
那会是个好主意吗?还有其他建议吗?
答案 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很有用。