Я хочу получить информацию о группе пользователей из Azure AD.Azure ActiveDirectory Graph API GraphClient не возвращает группы AD
Используя следующую Graph пакеты API для достижения этого
- Microsoft.Azure.ActiveDirectory.GraphClient
- Microsoft.IdentityModel.Clients.ActiveDirectory 2.13.112191810
Я могу успешно получить информацию о пользователях из API Azure Graph.
Но когда я запускаю этот метод для извлечения групп пользователей, Fiddler показывает успешный ответ HTTP 200 с фрагментом JSON, содержащим информацию о группе, однако сам метод не возвращается с IEnumerable.
IEnumerable<string> groups = user.GetMemberGroupsAsync(false).Result.ToList();
Код, похоже, не возвращается из этого асинхронного запроса.
Полученный опыт - пустая страница, в то время как конвейер аутентификации застревает.
Полный код
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
if (!incomingPrincipal.Identity.IsAuthenticated == true &&
_authorizationService.IdentityRegistered(incomingPrincipal.Identity.Name))
{
return base.Authenticate(resourceName, incomingPrincipal);
}
_authorizationService.AddClaimsToIdentity(((ClaimsIdentity) incomingPrincipal.Identity));
Claim tenantClaim = incomingPrincipal.FindFirst(TenantIdClaim);
if (tenantClaim == null)
{
throw new NotSupportedException("Tenant claim not available, role authentication is not supported");
}
string tenantId = tenantClaim.Value;
string authority = String.Format(CultureInfo.InvariantCulture, _aadInstance, _tenant);
Uri servicePointUri = new Uri("https://graph.windows.net");
ClientCredential clientCredential = new ClientCredential(_clientId, _password);
AuthenticationContext authContext = new AuthenticationContext(authority, true);
AuthenticationResult result = authContext.AcquireToken(servicePointUri.ToString(), clientCredential);
Token = result.AccessToken;
ActiveDirectoryClient activeDirectoryClient =
new ActiveDirectoryClient(new Uri(servicePointUri, tenantId),
async() => await AcquireTokenAsync());
IUser user = activeDirectoryClient
.Users
.Where(x => x.UserPrincipalName.Equals(incomingPrincipal.Identity.Name))
.ExecuteAsync()
.Result
.CurrentPage
.ToList()
.FirstOrDefault();
if (user == null)
{
throw new NotSupportedException("Unknown User.");
}
IEnumerable<string> groups = user.GetMemberGroupsAsync(false).Result.ToList();
return incomingPrincipal;
}
У меня такая же проблема. Обратите внимание, однако решение выше с использованием 'memberOf' является непереходным списком, т. Е. Только для непосредственных членов. Функция 'getMemberGroups', которая не работает, является транзитивной. Вам также нужно будет выполнять итерацию групп групп. Из [doco] (https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/users-operations#UserFunctions) «Вы можете вызвать функцию getMemberGroups, чтобы вернуть все группы, в которых пользователь является членом из. Проверка транзитивна, в отличие от чтения свойства навигации memberOf, которое возвращает только те группы, в которых пользователь является прямым членом. " – mgrowan
У меня такая же проблема с большинством моих вызовов, которые я пытался сделать с этой библиотекой. Он постоянно висит, хотя Fiddler показывает, что был сделан успешный запрос. –