Вызов MS Graph API для получения дополнительного атрибута из политики IEF B2C

#azure-ad-b2c

#azure-ad-b2c

Вопрос:

Я пытаюсь предотвратить создание дубликатов учетных записей в Azure B2C, просматривая пользовательское поле (т. Е. Идентификатор сотрудника) и, если запись этого идентификатора сотрудника уже существует, не позволяя пользователю создавать новую учетную запись. Поскольку не отображается, что вы можете использовать пользовательские поля в качестве входных данных, я рассматривал возможность использования Graph API, чтобы узнать, возвращается ли запись для данного идентификатора сотрудника — если это произойдет, это остановит процесс регистрации, если этого не произойдет, регистрация может быть продолжена.

Возможно ли напрямую вызвать Graph API и выполнить это сравнение количества записей в политике. Или мне нужно иметь отдельный скрипт / функцию для вызова Graph API с заданным идентификатором сотрудника, а затем возвращать количество записей для сравнения?

Ответ №1:

Во время регистрации сохраните значение EmployeeID в атрибуте signInNames, используя пользовательскую политику. Этот атрибут имеет ограничение уникальности.

Комментарии:

1. Здравствуйте, спасибо за предложение. Нужно ли для этого указывать signInNames.EmailAddress или signInNames.userName или можно создать signInNames.EmployeeID? Не уверен, повлияет ли это, но наша политика регистрации / входа разрешает аутентификацию пользователя через учетную запись Azure AD B2C или сторонних поставщиков (Google, Microsoft, Facebook). Спасибо.

2. Вы можете создать его в именах входа. неважно. На самом деле это ни на что не повлияет, за исключением того, что если у вас путешествие на основе имени пользователя, идентификатор сотрудника становится альтернативным именем пользователя.

Ответ №2:

Вы можете достичь этого с помощью Microsoft Graph SDK .

Для любого запроса к Microsoft Graph API требуется токен доступа для аутентификации. В решении используется Microsoft.Graph.Auth пакет NuGet, который предоставляет оболочку библиотеки аутентификации Microsoft на основе сценариев (MSAL) для использования с Microsoft Graph SDK.

Например, вы используете C # для достижения этого, фрагмент кода Program.cs будет выглядеть следующим образом:

 // Read application settings from appsettings.json (tenant ID, app ID, client secret, etc.)
AppSettings config = AppSettingsFile.ReadFromJsonFile();

// Initialize the client credential auth provider
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(config.AppId)
    .WithTenantId(config.TenantId)
    .WithClientSecret(config.ClientSecret)
    .Build();
ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

// Set up the Microsoft Graph service client with client credentials
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
  

UserService.cs:

 public static async Task ListUsers(GraphServiceClient graphClient)
{
    Console.WriteLine("Getting list of users...");

    // Get all users (one page)
    var result = await graphClient.Users
        .Request()
        .Select(e => new
        {
            e.employeeId
        })
        .GetAsync();

    foreach (var user in result.CurrentPage)
    {
        Console.WriteLine(JsonConvert.SerializeObject(user));
    }
}
  

Если вы получите его result как существующий сотрудник, вы аннулируете вход в систему и отправите ответ с сообщением об ошибке.