Как передать учетные данные 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