我试图了解有关使用 Azure服务原则将授权委派给Azure BLOB的几点。
在Active Directory中创建和配置服务主体:我创建了一个应用程序,创建了一个密钥(密码),并设置了访问Azure存储所需的权限;
配置Azure存储的IAM:在存储帐户部分下,我选择了我的存储帐户,在IAM下我将我的帐户(我的登录帐户为XYZ@hotmail.com)分配给< em>存储BLOB数据贡献者角色。
/authorize
端点。code
。code
端点与access_key
交换/token
。 Q1:这个access_key
是否授予我的客户端应用程序与XYZ@hotmail.com或服务主体相同的权限?
使用获得的访问密钥,我可以读/写azure blob。
Q2:如果XYZ@hotmail.com没有读/写访问权限(即未分配存储BLOB数据贡献者角色),我的客户端应用程序将无法读/写对于blob,,无论服务主管的角色是什么。这是我感到困惑的地方,我的印象是我的客户端App正在承担服务主体,因此它将具有与服务主体相同的权限,而不是XYZ@hotmail.com。例如,XYZ @ hotmail.com可以具有 Contributor 角色(即读/写),而服务原则将分配 Reader 角色。在这种情况下,我将拥有对BLOB存储的完全访问权限,而我的客户端应用程序将只具有对BLOB存储的读取权限。但是,似乎客户端应用程序获得与XYZ@hotmail.com相同的权限。我在这里错过了什么?
答案 0 :(得分:1)
Q1:这个access_key是否授予我的客户端应用程序相同的权限 作为XYZ@hotmail.com或服务负责人?
您获得的access_token
具有委托权限,该权限属于XYZ@hotmail.com
。这是因为您使用了Authorization code grant flow。
我在这里缺少什么?
对于您的方案,我建议您使用client_credentials flow作为您的应用。
使用client_credentials流程,只有在AAD中配置的应用程序权限才能获得访问令牌。此外,此访问令牌实际上是您的AAD应用程序本身的一部分。如果您为服务主体分配角色,您将获得具有该角色权限的访问令牌。
如果您使用授权代码授予流程,您将获得用户的访问令牌,而不是服务主体。因此,访问令牌将拥有该用户的权限。