Мы используем B2C и сохраняем номера клиентов в качестве поля расширения для пользователей. Один пользователь может иметь одного или нескольких клиентов, и они хранятся в строке, разделенной запятыми.
То, что я делаю сейчас, крайне неэффективно: 1. Получить всех пользователей 2. Получить свойства расширения для каждого пользователя 3. Проверьте, есть ли у них требуемое свойство расширения, и если он содержит клиента, которого я хочу. 4. Создайте список пользователей, которых я хочу.
Adclient - это IActiveDirectoryClient
var users = (await GetAllElementsInPagedCollection(await AdClient.Users.ExecuteAsync())).ToList();
var customersUsers = users.Where(user => user.AccountEnabled.HasValue && user.AccountEnabled.Value).Where(user =>
{
var extendedProperty = ((User) user).GetExtendedProperties().FirstOrDefault(extProp => extProp.Key == customersExtendedProperty.Name).Value?.ToString();
return extendedProperty != null && extendedProperty.Contains(customerId);
}).ToList();
Я хочу иметь возможность сделать это в одном запросе в ActiveDirectory с помощью AdClient. Если я попробую это, я получаю ошибки, что методы не поддерживаются, что имеет смысл, поскольку я предполагаю, что запрос создается за кулисами для запроса Active Directory.
Изменить - дополнительная информация:
Я смог запросить Graph API следующим образом:
var authContext = await ActiveDirectoryClientFactory.GetAuthenticationContext(AuthConfiguration.Tenant,
AuthConfiguration.GraphUrl, AuthConfiguration.ClientId, AuthConfiguration.ClientSecret);
var url = $"https://graph.windows.net:443/hansaborgb2c.onmicrosoft.com/users?api-version=1.6&$filter={customersExtendedProperty.Name} eq '{customerId}'";
var users = await _graphApiHttpService.GetAll<User>(url, authContext.AccessToken);
Однако в моем примере мне нужно использовать substringof для фильтрации, но это не поддерживается Azure Graph API.