Запрос фильтра для графа B2C для смешанного регистра IssuerAssignedId

#azure-ad-b2c #azure-ad-graph-api

#azure-ad-b2c #azure-ad-graph-api

Вопрос:

В нашем Azure B2C мы разрешаем пользователям регистрироваться, используя электронные письма со смешанным регистром в качестве своих логинов (IssuerAssignedId). Теперь у нас много пользователей (не всех, но многих) с именем типа IssuerAssignedId.Surname@domain.com .

В нашем API у нас есть конечные точки, которые выполняют бизнес-проверку пользователя по заданному электронному письму, и клиенты API предоставляют эти электронные письма в нижнем регистре. Таким образом, вызов Graph API не может найти пользователя при отправке электронной почты, например name.surname@domain.com если на самом деле зарегистрирован B2C IssuerAssignedId — это имя.Surname@domain.com .

Мы используем стандартный синтаксис фильтра:

 await _graphServiceClient.Users
  .Request()
  .Filter($"identities/any(c: c/issuerAssignedId eq '{email}' and c/issuer eq '{issuer}')")
  .Select(e => new { e.DisplayName, e.Id, e.Identities})
  .GetAsync();
 

Проблема в том, что запрос фильтра не позволяет использовать функцию tolower() odata, например

 $"identities/any(c: tolower(c/issuerAssignedId) eq '{email}' and c/issuer eq '{issuer}')"
 

поэтому я не могу нормализовать электронное письмо из лямбда-аргумента. Как я понимаю, odata для Graph B2C имеет некоторые ограничения по сравнению со стандартом.

Каким может быть подход к решению такой проблемы?

Ответ №1:

Если вы используете Graph API для создания записей пользователей, вы можете назначить версию IssuerAssignedId в нижнем регистре mail или атрибут расширения. Затем вы можете использовать это для поиска в нижнем регистре.

Для существующих данных вы можете ввести значение нижнего регистра в новый столбец с помощью вызова исправления Graph API.