我一生都无法弄清楚如何查询 Azure Active Directory 的图形 API 来获取属于特定 AppRole 的所有用户。
首先我尝试了类似的东西:
client.Users.Where(u => u.AppRoleAssignments.Any(r => r.Id == "some-guid"));
但这不会编译,因为 AppRoleAssignments 是一个 IPgedCollection,因此您不能对其执行 .Any 之类的操作。
然后我尝试查询我的应用程序的 ServicePrincipal 中的所有 AppRoleAssignments:
var servicePrincipal = await client.ServicePrincipals
.Expand(p => p.AppRoleAssignments)
.Where(p => p.AppId == "my app id guid")
.ExecuteSingleAsync();
But servicePrincipal.AppRoleAssignments
固执地空手而归,似乎无视我的.Expand。
我还尝试直接通过 ID 获取 ServicePrincipal 并执行 Expand:
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 中吗?