11

Возможно ли получить доступ к папкам и элементам других учетных записей Exchange, отличных от того, который входит в систему вошедшего в систему пользователя?Управляемый API веб-служб Exchange: доступ к другим элементам пользователей

Могу ли я это сделать через управляемый API веб-сервисов Exchange?

+0

Вы используете EWS напрямую или используете его через EWS Managed API? –

+0

@Alfred Myers Я использую управляемый API EWS – Luke

ответ

14

Да, это возможно, но вы должны знать пароль другого пользователя или каким-то образом использовать эти учетные данные (объект NetworkCredential). Типичные первые строки кода вас может быть

ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1); 
myService.Credentials = new NetworkCredential ("[email protected]", "[email protected]"); 

так что вы можете получить доступ к веб-служб Exchange Server, с учетной записью, которая является другой в качестве текущего пользователя. См. Описание ExchangeService object для получения дополнительной информации.

Если вы администратор, вы можете сделать user impersonation by SMTP address.

+0

@Alfred Myers & @ user457261: Вы не написали никакого комментария. Является ли информация, которую я написал, что вам нужно? – Oleg

+0

Спасибо за ваш ответ, но я искал способ, не узнавая каждый пароль. Как использование суперпользователя, который может получить доступ ко всем учетным записям. – Luke

+2

@ Luke: Последние предложения из моего ответа описывают, как это сделать. Как «суперадмин» вы можете олицетворять любого пользователя по SMTP-адресу, не имея никакой информации о его пароле. Посмотрите http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx еще раз. – Oleg

0

Я предлагаю использовать олицетворение вместо входа для каждого пользователя. Через олицетворение вы можете олицетворять пользователей. Это не то же самое, что и полный доступ. Полный доступ - это поведение, олицетворение действует.

Предпочтение олицетворения - у вас есть одно имя пользователя и пароль вместо x имен пользователей и паролей.

Вы можете использовать олицетворение, как таким образом:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010); 
service.Credentials = new NetworkCredential(appName, appPassword, emailDomain); 
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userToImpersonate); 

, когда пользователь имеет делегировать доступ к кому-то другому, вы можете получить доступ к папке другого пользователя. Например: Лицо A будет выдано и может получить доступ к Лицу B

4

Знание пароля неверно и использование олицетворения (в наши дни) неверно.

Вот как вы это делаете.

 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); 
+0

Это гораздо лучший ответ, именно то, что я так долго искал – Nacht

Смежные вопросы