Удалить пользователя из Azure AD B2 C, используя Graph API сразу после его создания - ObjectNotFoundException - PullRequest
0 голосов
/ 24 апреля 2020

Я использую пользовательскую политику для регистрации пользователей в Azure AD B2 C. На последнем этапе, перед выпуском JWT, технический профиль выполняет следующие действия:

<!-- Store the user in the AD -->
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" ContinueOnError="false" />
<!-- Sends the user information, including ObjectId to website to store locally-->
<ValidationTechnicalProfile ReferenceId="REST-SendUserInformation" ContinueOnError="false"/>

Итак, все работает нормально. Однако, в моем коде, если что-то пойдет не так на шаге 2 (отправка информации о пользователе для локального хранения), я вызываю Graph API для удаления только что созданного пользователя. Тем не менее, я заметил, что Graph API работает, когда я «отлаживаю» (что означает, что требуется некоторое время, чтобы нажать «Далее ... Далее ...»), но когда он работает на сервере, пользователь не удаляется из AD. Это не вызывает исключения.

Мой код для удаления пользователя выглядит следующим образом:

        public AzureGraphService(IConfiguration configuration)
        {
            var azureOptions = new AzureAdOptions();
            configuration.Bind("AzureAdB2C", azureOptions);

            // Client credential provider is used by services and desktop applications to acquire Microsoft Graph access token without a user.
            _confidentialClientApplication = ConfidentialClientApplicationBuilder
                .Create(azureOptions.ClientId)
                .WithTenantId(azureOptions.Domain)
                .WithClientSecret(azureOptions.ClientSecret)
                .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(_confidentialClientApplication);

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

        public async Task DeleteUserFromAD(string azuresubid)
        {
            try
            {
                // Delete user by object ID
                await _graphClient.Users[azuresubid]
                   .Request()
                   .DeleteAsync();          
            }
            catch (Exception ex)
            {
                // TODO - Log exception?
                throw ex;
            }
        }

После просмотра журналов аудита в Azure AD B2 C я нашел это "ObjectNotFoundException".

enter image description here

Тем не менее, я уверен, что объект правильный, и идентификатор объекта, который я использую для удаления, также является правильным, поскольку он работает, если я "отлаживаю" (go медленно).

Мой вопрос: есть ли задержка между созданием объекта (пользователя) в AD B2 C и временем, которое я действительно могу увидеть и удалить объект оттуда?

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2020

Задержка, выполнение политики нацелено на те же контроллеры домена, ваш вызов API api из вашего REST API, скорее всего, использует другой D C и не может найти учетную запись в это время. Используйте повторные логи c, попробуйте 3 раза с 5-секундной задержкой. Обычно репликация завершается в 7se c.

...