Возможно ли получить доступ к папкам и элементам других учетных записей Exchange, кроме учетной записи вошедшего в систему пользователя?
Могу ли я сделать это через управляемый API веб-служб Exchange?
Возможно ли получить доступ к папкам и элементам других учетных записей Exchange, кроме учетной записи вошедшего в систему пользователя?
Могу ли я сделать это через управляемый API веб-служб Exchange?
Да, это возможно, но вы должны знать пароль другого пользователя или каким-то образом получить эти учетные данные (объект NetworkCredential
). Типичные первые строки вашего кода могут быть
ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1);
myService.Credentials = new NetworkCredential ("[email protected]", "P@ssword00");
так что вы можете получить доступ к веб-службам Exchange Server с учетной записью, отличной от текущего пользователя. Дополнительную информацию см. В описании объекта ExchangeService.
Если вы являетесь администратором, вы можете сделать пользователя олицетворением по SMTP. адрес.
WebCredentials
в то время. В то время управляемый API EWS был в версии 1.1 (или 1.2), а не 2.2, как сейчас. WebCredentials
был представлен, начиная с EWS Managed API 2.0. Секунды будьте очень осторожны, если пишете, что что-то не так: использовать олицетворение неправильно. Даже если вы найдете альтернативный способ для доступа к учетным данным других пользователей для EWS Managed API 1.1, способ олицетворения все равно будет правильным. В то время это был единственный способ «Знай меня», рекомендованный Microsoft.
- person Oleg; 30.09.2014
WebCredentials
, вы обнаружите, что WebCredentials
не более чем оболочка для NetworkCredential
: WebCredentials обертывает экземпляр объекта T: System.Net.NetworkCredential (см. здесь).
- person Oleg; 30.09.2014
Знать пароль неправильно, а использовать олицетворение (в наши дни) неправильно.
Вот как ты это делаешь.
ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
//CREDENTIALS OF AN ACCOUNT WHICH HAS READ ACCESS TO THE CALENDAR YOU NEED
_service.Credentials = new WebCredentials(username, password);
_service.Url = new Uri(serviceURL);
SearchFilter.SearchFilterCollection searchFilter = new SearchFilter.SearchFilterCollection();
searchFilter.Add(new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(-1)));
searchFilter.Add(new SearchFilter.IsLessThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(2)));
ItemView view = new ItemView(50);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.AppointmentType, AppointmentSchema.End);
//THIS NEXT LINE!!!
var calendarSearch = new FolderId(WellKnownFolderName.Calendar, new Mailbox("[email protected]"));
var appointments = _service.FindItems(calendarSearch, searchFilter, view);
Я предлагаю использовать олицетворение вместо входа для каждого пользователя. Вы можете выдавать себя за пользователей, выдавая себя за другое лицо. Это не то же самое, что полный доступ. Полный доступ предоставляется, выдача себя за другое лицо.
Перед олицетворением у вас есть одно имя пользователя и пароль вместо x имен пользователей и паролей.
Вы можете использовать олицетворение следующим образом:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(appName, appPassword, emailDomain);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userToImpersonate);
когда у пользователя есть делегированный доступ другому пользователю, вы можете получить доступ к папке другого пользователя. Например: человек A будет выдавать себя за другое лицо и сможет получить доступ к человеку B