繁体   English   中英

如何使用Azure Active Directory图谱API获取属于AppRole的所有用户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM