Управляемый API веб-служб Exchange: доступ к элементам других пользователей - PullRequest
11 голосов
/ 24 сентября 2010

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

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

Ответы [ 3 ]

15 голосов
/ 30 сентября 2010

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

ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1);
myService.Credentials = new NetworkCredential ("user@mycorp.local", "P@ssword00");

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

Если вы являетесь администратором, вы можете сделать олицетворение пользователя по SMTP-адресу .

4 голосов
/ 29 сентября 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@ofsomemailbox.com"));
        var appointments = _service.FindItems(calendarSearch, searchFilter, view);
0 голосов
/ 23 августа 2012

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

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

Вы можете использовать олицетворение следующим образом:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...