#c# #azure #azure-active-directory #microsoft-graph-api #asp.net-core-webapi
#c# #azure #azure-active-directory #microsoft-graph-api #asp.net-core-webapi
Вопрос:
Я хочу знать список групп, членом которых является пользователь, в AAD. На основе членства в группе они могут выполнять другую функцию. Для достижения этой цели я использовал MS Graph API, но я получаю только идентификаторы групп, а не имена групп. Я использовал следующие два способа, используя graph API. Первый используемый метод,
await graphClient.Users[upn].GetMemberGroups(false).Request().PostAsync()
ответ:
[ "fee2c45b-915a-4a64-b130-f4eb9e75525e", "4fe90ae7-065a-478b-9400-e0a0e1cbd540", "e0c3beaf-eeb4-43d8-abc5-94f037a65697" ]
Второй используемый метод,
await graphClient.Users[upn].MemberOf.Request().GetAsync();
ответ:
[
{
"deletedDateTime": null,
"id": "1c4934554-5006-403a-bf4f-bsdfeerwfs6fe6f",
"oDataType": "#microsoft.graph.group",
"additionalData": {
"creationOptions": [],
"isAssignableToRole": null,
"resourceBehaviorOptions": [],
"resourceProvisioningOptions": []
}
},
{
"deletedDateTime": null,
"id": "f8975c2f-7651d-4f3a-1234-4ec3808a0ac2",
"oDataType": "#microsoft.graph.group",
"additionalData": {
"creationOptions": [
[]
],
"isAssignableToRole": null,
"resourceBehaviorOptions": [],
"resourceProvisioningOptions": [
[]
]
}
}
]
Что мне нужно, так это имя группы и идентификатор группы. Как мне объединить оба эффективным способом? Или есть какой-либо другой метод, который я могу попробовать для этой цели?
Ответ №1:
Для меня следующее работает для получения имен групп:
var page = await graphClient
.Users[userObjectId]
.MemberOf
.Request()
.GetAsync();
var names = new List<string>();
names.AddRange(page
.OfType<Group>()
.Select(x => x.DisplayName)
.Where(name => !string.IsNullOrEmpty(name)));
while (page.NextPageRequest != null)
{
page = await page.NextPageRequest.GetAsync();
names.AddRange(page
.OfType<Group>()
.Select(x => x.DisplayName)
.Where(name => !string.IsNullOrEmpty(name)));
}
return names;
В ответе для групп должно быть DisplayName / имя_дисПлея.
Комментарии:
1. Код должен возвращать имена, а не groupNames. Мои значения DisplayName равны нулю, несмотря на то, что идентификаторы верны для ожидаемых групп.
2. Исправление: мне пришлось добавить Directory.Read. Все разрешения для моей регистрации в приложении B2C. Теперь я получаю возвращенное DisplayName.