Как передать учетные данные HostingEnvironment.Impersonate в ExchangeService EWS?

Можно ли передать учетные данные пользователя, просматривающего мое веб-приложение asp.net, в EWS? FindAppointments вызов?

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

Приведенный ниже код прекрасно работает при запуске localhost, но работает с веб-сервера, несмотря на то, что Windows Authentication и Identity Impersonation настроены, он выдает ошибку "Отказано в доступе".

using (HostingEnvironment.Impersonate())
    {
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

    service.UseDefaultCredentials = true;
    service.AutodiscoverUrl(UserEmailAddress);

    Mailbox mb = new Mailbox(UserEmailAddress);
    FolderId cfCalendarFolderID = new FolderId(WellKnownFolderName.Calendar, mb);
    CalendarView cvCalendarView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(30), 1000);
    cvCalendarView.MaxItemsReturned = 3;

Возможно, мне не хватает простого способа пройти HostingEnvironment учетные данные для моего ExchangeService объект?

Есть ли способ проверить, что service.UseDefaultCredentials являются?

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

service.Credentials = new System.Net.NetworkCredential(username, password, domain);

Я также попробовал следующее, но получить тот же ServiceResponseException отказано в доступе errot.

service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;

Заранее спасибо за вашу помощь.

Дополнительная информация, которая может иметь или не иметь отношение:

  • Идентификация пула приложений для веб-сайта NetworkService,
  • UserEmailAddress переменная устанавливается из поиска AD на основе System.Security.Principal.WindowsIdentity.GetCurrent().Name

РЕДАКТИРОВАТЬ (14 августа 2012) Чтобы достичь того, что я хотел бы сделать выше, я считаю, HostingEnvironment.Impersonate не требуется Вместо этого мне нужно использовать ExchangeService"s ImpersonatedUserId имущество. Подробнее об этом здесь. Единственная проблема заключается в том, что мы запускаем Exchange 2007 и команду Power Shell для включения учетной записи службы для олицетворения всех пользователей (которую можно использовать для передачи в .Credentials параметр) только кажется совместимым с Exchange 2010.

1 ответ

Вы должны попробовать использовать WebCredentials вместо NetworkCredential см. соответствующий пост. Кажется, есть проблема с EWS и AutoDiscover + NetworkCredentials

Другие вопросы по тегам