如何更新 MS Graph 客户端服务主体 AppRoleAssignments

How To Update MS Graph Client Service Principal AppRoleAssignments

我正在尝试通过 Graph Client 更新用户的 AppRole 分配。根据 MS 文档,我试图从服务主体端而不是用户端进行操作。

                var sp = await _graphServiceClient.ServicePrincipals[objectId].Request().GetAsync();
                ServicePrincipal newSp = new ServicePrincipal
                {
                    Id = objectId,
                    AppId = _configuration["AzureAd:AppId"]
                };

                newSp.AppRoleAssignedTo = new ServicePrincipalAppRoleAssignedToCollectionPage();

                    newSp.AppRoleAssignedTo.Add(new AppRoleAssignment 
                    { 
                        PrincipalId = new Guid(u.Id), 
                        ResourceId = new Guid(objectId), 
                        AppRoleId = new Guid(r) 
                     });
                

                await _graphServiceClient.ServicePrincipals[objectId].Request().UpdateAsync(newSp);

我收到了 'One or more property values specified are invalid',但当然没有关于什么 属性 甚至哪个对象有问题的真实信息。

有人看到明显的东西吗?我在猜测客户端使用的语法,因为我没有看到太多文档或示例。

我用与你相同的代码进行测试,遇到了同样的问题,做了一些修改,但仍然无法解决问题。对于更新用户的AppRole分配的要求,我不确定我们是否可以通过您提供的代码来完成,但我可以提供另一种更直接的解决方案。

您提供的代码是新建一个服务主体并将角色分配添加到其中,然后更新服务主体。这里提供另一种解决方案,它可以直接添加应用角色分配:

var appRoleAssignment = new AppRoleAssignment
{
    PrincipalId = Guid.Parse("{principalId}"),
    ResourceId = Guid.Parse("{resourceId}"),
    AppRoleId = Guid.Parse("{appRoleId}")
};

await graphClient.Users["{userId}"].AppRoleAssignments
    .Request()
    .AddAsync(appRoleAssignment);

上面的代码在后端请求 this 图 api。