![](/img/trans.png)
[英]How to get all user attributes from azure active directory using Microsoft Graph api
[英]How to get all users that belong in an AppRole using Azure Active Directory Graph API
我不能为我的生活弄清楚如何查询Azure Active Directory的Graph API以获取属于特定AppRole的所有用户。
首先我尝试了类似的东西:
client.Users.Where(u => u.AppRoleAssignments.Any(r => r.Id == "some-guid"));
但是这不会编译,因为AppRoleAssignments是一个IPagedCollection所以你不能做像.Any这样的事情。
然后我尝试在ServicePrincipal中查询我的应用程序中的所有AppRoleAssignments:
var servicePrincipal = await client.ServicePrincipals
.Expand(p => p.AppRoleAssignments)
.Where(p => p.AppId == "my app id guid")
.ExecuteSingleAsync();
但是servicePrincipal.AppRoleAssignments
固执地回来了,似乎无视我的.Expand。
我也尝试直接通过ID获取ServicePrincipal并进行扩展:
var principal = await client.ServicePrincipals
.GetByObjectId("feeaae9c-40a3-48a3-8a01-b87343f5ecfc")
.Expand(p => p.AppRoleAssignments)
.ExecuteAsync();
但这只会导致错误(如果你删除.Expand就会消失):
{"odata.error":{"code":"Request_BadRequest","message":{"lang":"en","value":"Invalid object identifier 'feeaae9c-40a3-48a3-8a01-b87343f5ecfc()'."}}}
这是一个奇怪的错误,因为错误消息中的对象id后缀为我的代码未添加的'()'。
我错过了一些明显的东西吗 当然有一种简单的方法可以让所有用户都进入AppRole?
我终于找到了答案。 为了从ServicePrincipal获取AppRoleAssignments,您需要直接查询列表,而不是尝试将其从ServicePrincipal扩展:
await client.ServicePrincipals
.GetByObjectId(servicePrincipalObjectId)
.AppRoleAssignedTo
.ExecuteAsync()
然后,您必须手动浏览用户和组以获取最终用户列表。 这可能会导致许多Graph API服务调用,具体取决于有多少组和用户,因此请注意!
编辑:正如Dan Kershaw在评论中提到的,角色仅适用于与AppRoles直接链接的组中的用户。 子组不继承角色。
我已经竖起了完整的解决方案的要点在这里 ,因为它实在是太大了把这里的内联。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.