问题描述
我正在尝试通过图形客户端更新用户的 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);
我收到“指定的一个或多个属性值无效”,但当然没有关于哪个属性甚至哪个对象是问题的真实信息。
有人看到什么明显的东西吗?我在猜测客户端使用的语法 bc 我没有看到太多的文档或示例。
解决方法
我使用与您相同的代码进行测试并遇到相同的问题并进行了一些修改但仍然无法解决问题。对于你的更新用户的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。