Можно ли передать учетные данные пользователя, просматривающего мое веб-приложение 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.
service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;
Заранее благодарим за помощь.
Дополнительная информация, которая может иметь или не иметь отношение к делу:
- Пул приложений для веб-сайта:
NetworkService
.
- Переменная
UserEmailAddress
устанавливается из поиска AD на основе System.Security.Principal.WindowsIdentity.GetCurrent().Name
РЕДАКТИРОВАТЬ (14 августа 2012 г.)
Для достижения того, что я хотел бы сделать выше, я считаю, что HostingEnvironment.Impersonate
не требуется.
Вместо этого мне нужно использовать свойство ExchangeService
ImpersonatedUserId
.
Подробнее об этом здесь
Единственная проблема, однако, заключается в том, что мы запускаем Exchange 2007, и команда power shell для включения учетной записи службы для олицетворения всех пользователей (которую вы бы использовали, передавая параметр .Credentials
) только кажется совместимой с Exchange 2010.