我一直在调查如何使用Microsoft Graph API(nuget上可用的dotnet / C#库)从Azure AD组添加(以及稍后删除)用户。
忽略连接GraphServiceClient
等所有其他内容。我正在尝试与下面的示例非常相似的代码,没有任何异常(建议一切正常)但是当我再次通过API获取组时,它还没有任何成员!
有趣的是(作为旁白),当我在memberOf
对象上请求user
属性并告诉它扩展它时,它仍会返回null。
var user = await client.Users[userPrincipalName]
.Request()
.Select("id,memberOf")
.Expand("memberOf")
.GetAsync();
var group = await client.Groups[groupId]
.Request()
.Select("members")
.Expand("members")
.GetAsync();
group.Members.Add(user);
await client.Groups[groupId].Request().UpdateAsync(group);
// userPrincipalName => "test.user@mytenant.com"
// groupId => the object GUID for the group
有谁知道我在这里做错了什么?我用来提供此代码的文档基于以下文档的链接:
此外,我尝试将此处建议的解决方案的方法设置为为用户设置许可证:
Assign user license via Graph API
像往常一样,感谢您的帮助。
彼得
其他
我也试过在图API中寻找潜在的更新.Members
属性/资源而不是组本身:
await client.Groups[groupId].Members.Request(). // <-- Only has GetAsync()
但它只有GetAync()
方法可用。
根据回答更新
var usersGroups = await client.Users[userPrincipalName].MemberOf.Request().GetAsync();
if (!usersGroups.Any(g => g is Group && g.Id == groupId))
{
// User is not a member of the group, add them.
var user = await client.Users[userPrincipalName].Request().Select("id").GetAsync();
await client.Groups[groupId].Members.References.Request().AddAsync(user);
}
我已根据答案添加了上面的代码段,因为我认为它简洁地回答了有关添加成员的问题。
感谢Nan Yu的回答。
答案 0 :(得分:6)
要将用户添加到群组,您可以使用:
User userToAdd = await graphClient.Users["objectID"].Request().GetAsync();
await graphClient.Groups["groupObjectID"].Members.References.Request().AddAsync(userToAdd);
获取小组成员:
List<ResultsItem> items = new List<ResultsItem>();
// Get group members.
IGroupMembersCollectionWithReferencesPage members = await graphClient.Groups[id].Members.Request().GetAsync();
if (members?.Count > 0)
{
foreach (User user in members)
{
// Get member properties.
items.Add(new ResultsItem
{
Properties = new Dictionary<string, object>
{
{ Resource.Prop_Upn, user.UserPrincipalName },
{ Resource.Prop_Id, user.Id }
}
});
}
}
获取当前用户是其直接成员的群组,您可以尝试:
IUserMemberOfCollectionWithReferencesPage memberOfGroups = await graphClient.Users["testnanyu@testbasic1.onmicrosoft.com"].MemberOf.Request().GetAsync();
if (memberOfGroups?.Count > 0)
{
foreach (var directoryObject in memberOfGroups)
{
// We only want groups, so ignore DirectoryRole objects.
if (directoryObject is Group)
{
Group group = directoryObject as Group;
items.Add(new ResultsItem
{
Display = group.DisplayName,
Id = group.Id
});
}
}
}