0

相关软件包版本:

  1. Microsoft.EntityFrameworkCore:3.1.9
  2. Microsoft.Graph:3.28

我将用几个例子来说明不一致的地方:

使用 powershell 脚本检索组

此处提供了获取组的脚本:显示分配给应用程序代理应用程序的用户和组

返回的唯一组:157

备注:组数和对象 id 对应于我可以在Azure 门户上的Azure Active Directory刀片上看到的那些,因此我将其用作其他方法的参考。

使用 App Id 通过 .NET 核心获取组

await graphServiceClient.ServicePrincipals.Request().Filter($"appId eq '{appId}'").Expand("AppRoleAssignedTo");

返回的唯一组:101

备注:我无法确定为什么某些组没有返回。为了确认权限问题不是造成差异的原因,我尝试使用缺失组的 objectIds 手动检索组,如下所示:

var group = await graphServiceClient.Groups[id].Request().Expand("AppRoleAssignments").GetAsync();
do
{
   assignments.AddRange(group.AppRoleAssignments.CurrentPage.ToList().Where(x => x.ResourceId.ToString().Equals(appServicePrincipalId)).ToList());
} while (group.AppRoleAssignments.NextPageRequest != null);

我能够使用这种方法成功检索丢失的组。


使用服务主体通过 .NET 核心获取组

为了通过,我将 appId 方法与依赖于服务主体的方法进行了如下交换,但结果与 AppId 相同。

await graphServiceClient.ServicePrincipals[appServicePrincipalId].AppRoleAssignedTo.Request().GetAsync()

返回的唯一组:101


通过使 powershell 脚本适应 .NET 来检索组

var tx = await graphServiceClient.Groups.Request().Expand("AppRoleAssignments").GetAsync()

do
  {
    foreach (var group in tx)
    {
       do
       {
         assignments.AddRange(group.AppRoleAssignments.CurrentPage.ToList().Where(x => x.ResourceId.ToString().Equals(appServicePrincipalId)).ToList());
         if (group.AppRoleAssignments.NextPageRequest != null)
         {
           group.AppRoleAssignments = await group.AppRoleAssignments.NextPageRequest.GetAsync();
         }
       } while (group.AppRoleAssignments.NextPageRequest != null);
     }
     tx = await tx.NextPageRequest.GetAsync();
} while (tx.NextPageRequest != null);

这里的方法是遍历所有组,然后过滤具有正确服务主体 ID 的组。

返回的唯一组:136

不同寻常的是,虽然我能够使用这种方法检索更多组,但它实际上无法检索通过App Id/Service 主体方法获得的某些组。将两者加起来,总共有146个


由于保密原因,很遗憾,我无法透露组的具体信息或各自的内容,但每个缺失的组都有成员,并且至少分配了一个AppRole

4

1 回答 1

0

事实证明这些方法是正确的,库版本只是过时了。使用Microsoft.Graph: 4.15,我可以使用上述任何方法获取所需的组。

于 2022-01-29T21:30:59.810 回答