11

Ist es möglicherweise möglich, auf die Ordner und Elemente anderer Exchange-Konten als das Konto des angemeldeten Benutzers zuzugreifen?Verwaltete Exchange-Webdienste-API: Zugriff auf andere Benutzerelemente

Kann ich dies über die verwaltete Exchange-Webdienste-API tun?

+0

Verwenden Sie EWS direkt oder verwenden Sie es über die EWS Managed API? –

+0

@Alfred Myers Ich benutze EWS Managed API – Luke

Antwort

14

Ja, es ist möglich, aber Sie sollten das Passwort des anderen Benutzers kennen oder in irgendeiner Weise diese Anmeldeinformationen (NetworkCredential Objekt) greifen. Die typischen ersten Zeilen von Code könnte

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

so können Sie Exchange Server Web Services zugreifen mit dem Konto, das als den aktuellen Benutzer andere ist. Weitere Informationen finden Sie unter ExchangeService object Beschreibung. Wenn Sie ein Administrator sind, können Sie den Benutzer impersonation by SMTP address.

+0

@ Alfred Myers & @ user457261: Sie haben keinen Kommentar geschrieben. Ist die Information, die ich geschrieben habe, was du benötigst? – Oleg

+0

Danke für deine Antwort, aber ich war auf der Suche nach einem Weg, ohne jedes Passwort kennen zu müssen. Wie mit einem Superuser, der auf alle Konten zugreifen kann. – Luke

+2

@Luke: Die letzten Sätze aus meiner Antwort beschreiben, wie man das macht. Als "Superadmin" können Sie jeden Benutzer nur per SMTP-Adresse imitieren, ohne Informationen über sein Passwort zu haben. Sehen Sie sich http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx noch einmal an. – Oleg

0

Ich empfehle die Verwendung von Identitätswechsel statt Login für jeden Benutzer. Über Identitätswechsel können Sie Benutzer imitieren. Es ist nicht das gleiche wie Vollzugriff. Vollzugriff ist auf Verhalten von, Identitätswechsel ist als.

Vor dem Identitätswechsel haben Sie einen Benutzernamen und ein Passwort anstelle von x Benutzernamen und Passwörtern.

können Sie Identitätswechsel wie auf diese Weise verwenden:

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

, wenn ein Benutzer delegieren sonst noch Zugang zu jemandem hat, können Sie den Ordner des anderen Benutzers zugreifen können. Beispiel: Person A wird personifiziert und kann auf Person B zugreifen.

4

Wissen, dass das Passwort falsch ist und die Verwendung von Identitätswechsel (in diesen Tagen) falsch ist.

Hier ist, wie Sie es tun.

 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

Das ist eine viel bessere Antwort, genau das, wonach ich schon so lange gesucht habe – Nacht