Получение ошибки: «У учетной записи нет разрешения на олицетворение запрошенного пользователя», хотя у меня есть доступ к олицетворению - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть служба Windows, которая прослушивает локальные почтовые ящики Exchange, используя EWS с доступом к олицетворению .

У меня есть один пользователь-администратор (учетная запись службы), который имеет доступ к олицетворению, и я настроил этого пользователя для входа в службу Windows.

Я использую аутентификацию NTLM в C # .Net для входа в систему и олицетворения почтового ящика. Когда я запускаю службу Windows и пытаюсь олицетворять почтовый ящик, я получаю следующую ошибку, хотя у меня есть доступ к олицетворению к моей учетной записи службы.

“Error While initial sync for mailbox SCHEDTEST91@SCHED2010.COM. Exception: Microsoft.Exchange.WebServices.Data.ServiceResponseException: The account does not have permission to impersonate the requested user.
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ProcessWebException(WebException webException)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at SXA.ES.EWSNotificationListenerService.NotificationListener.NotificationSynchronizerBase.GetCurrentSyncState(String smtpAddress, String autodiscoverUrl)”

Сюрпризом является то, что эта проблема возникает на определенных виртуальных машинах, где размещена моя служба Windows.

У меня всего 4 виртуальных машины и из 4 виртуальных машин служба Windows работает нормально и может выдавать себя за почтовый ящик на 2 виртуальных машинах, но с той же конфигурацией и той же настройкой другие 2 имеют вышеуказанную ошибку.

Вот мой код, который создает OnPremise Exchange Service:

public ExchangeService CreateOnPremiseExchangeService(ExchangeServiceProperties properties)
        {
            var exchangeService = CreateExchangeService(properties);

            exchangeService.UseDefaultCredentials = true;

            return exchangeService;
        }

private static ExchangeService CreateExchangeService(ExchangeServiceProperties properties)
        {
            var exchangeService = new ExchangeService(properties.ExchangeVersion)
            {
                Url = properties.ExchangeUri,
                ReturnClientRequestId = true,
                SendClientLatencies = true,
                UserAgent = properties.UserAgent
            };

            if (properties.TraceListener != null)
            {
                exchangeService.TraceListener = properties.TraceListener;
                exchangeService.TraceFlags = TraceFlags.All;
                exchangeService.TraceEnabled = true;
            }

            if (!string.IsNullOrWhiteSpace(properties.TargetMailbox))
            {
                exchangeService.ImpersonatedUserId = new ImpersonatedUserId(
                    ConnectingIdType.SmtpAddress,
                    properties.TargetMailbox);
            }

            return exchangeService;
        }

Я много раз пытался найти в Google эту проблему и не смог найти ни одного сообщения.

Мне нужна помощь для решения этой проблемы. Пожалуйста, дайте мне знать, если кто-то сталкивался с той же проблемой во время работы с EWS Service с C # .Net, и есть решение для этого.

Примечание. Если я использую базовую аутентификацию здесь, то она работает нормально и на этих 2 виртуальных машинах, эта проблема возникает только при аутентификации NTLM Windows.

1 Ответ

0 голосов
/ 05 октября 2018

Я провел дальнейшее расследование и нашел основную причину этой проблемы, см. Подробности ниже и способы их устранения.

  1. На самом деле я установил Outlook и настроил учетную запись эл. Я ввел имя пользователя и пароль, а также установил флажок «Запомнить мои учетные данные» и нажмите «ОК».
  2. Теперь, если вы перейдете на Панель управления \ Учетные записи пользователей \ Диспетчер учетных данных , вы увидите две записи в разделе учетных данных Windows, одну для сетевого адреса сервера Exchange ( ABCEXCHANGESERVER.DOMAIN.COM ) с именем пользователя, совпадающим с тем, которое вы настроили в Outlook, и другой отдельной записью для того же имени пользователя, что и идентификатор Windows.
  3. Когда я удалил запись сетевого адреса Exchange Server ( ABCEXCHANGESERVER.DOMAIN.COM ) из Панель управления \ Учетные записи пользователей \ Диспетчер учетных данных , эта проблема была решена.
  4. Согласно моему пониманию ABCEXCHANGESERVER.DOMAIN.COM в нашем случае является доменом / сетевым адресом сервера обмена и используется EWS и Outlook при доступе почтовые ящики. Поэтому, когда мы настраиваем почтовый ящик в Outlook и в диалоговом окне учетных данных, если мы устанавливаем флажок «Запомнить мои учетные данные», он кэширует учетные данные для вызова Exchange на ABCEXCHANGESERVER.DOMAIN.COM , а также для профиля почтового ящика в Диспетчер учетных данных. Теперь, когда наш сервис пытается вызвать ABCEXCHANGESERVER.DOMAIN.COM , используя NTLM , он сначала проверяет кэш учетных данных для ABCEXCHANGESERVER.DOMAIN.COM адрес сети / домена и, если есть, найденная там запись всегда использует кэшированные учетные данные вместо учетных данных для входа в службу.
  5. Если кто-то столкнулся с той же проблемой, просто очистите запись сетевого адреса Exchange Server из Панель управления \ Учетные записи пользователей \ Диспетчер учетных данных , и эта проблема будет решена.

Мое предложение, избегайте настройки Outlook на ВМ. Как это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...