2016-04-28 19 views
1

Ich habe eine funktionierende EWS-Verbindung, aber im Moment muss ich meinen Benutzernamen und mein Passwort jedes Mal, dass ich die App stoppe. Schließlich werden viele verschiedene Benutzer die Anwendung verwenden. Gibt es eine Möglichkeit, programmgesteuert einen AccessStoken zu erhalten, den ich in der lokalen Filiale speichern kann? (Ich möchte nicht, das Passwort speichern)Programmgesteuert bekommen EWS Access

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 

    ExchangeCredentials credentials = new WebCredentials(username, password); 
    service.setCredentials(credentials); 

    service.setUrl(new URI("https://domain/EWS/Exchange.asmx")); 

Antwort

0

Es Identitätswechsel genannt wird (der Mail-Server-Administrator muss ein Netz Shell-Befehl ausführt Superuser-Berechtigungen zu einem bestimmten Mail-Konto zuweisen).

Hier ist der Link https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx

Auch hier ist ein funktionierendes Beispiel dafür, wie ich Identitätswechsel verwenden für Hunderte von Benutzern. Sie müssen die Benutzernamen in einem Hashset oder einem Wörterbuch anstelle eines Zugriffstokens speichern (es gibt kein Zugriffstoken in EWS).

Private _ExchangeServicesMainThread As New Dictionary(Of String, ExchangeService) 
Private _UserIdState As New Dictionary(Of String, Integer) 
Private _Connections As New Dictionary(Of String, StreamingSubscriptionConnection) 
Private _Subscriptions As New Dictionary(Of String, StreamingSubscription) 

Private Function InitializeService(pUsername As String) As ExchangeService 
    Dim oExService As ExchangeService 
    Dim strEmailAddress As String = pUsername & config.MailDomain 
    Dim strAdminEmailAddress As String = config.ExchangeServerAdminUserName & config.MailDomain 

     oExService = New ExchangeService(config.ExchangeVersion) 
     oExService.UseDefaultCredentials = False 
     oExService.Url = New Uri(config.SecureHTTP & config.EmailServer & config.ExchangeManagedAPIEndpoint) 
     oExService.Credentials = New Net.NetworkCredential(config.ExchangeServerAdminUserName, config.ExchangeServerAdminPass, config.ActiveDirectoryDomain) 
     oExService.ImpersonatedUserId = New ImpersonatedUserId(ConnectingIdType.SmtpAddress, strEmailAddress) 

     Return oExService 
End Function 

Angenommen, Sie haben eine initialisierte Wörterbuch aller Benutzer dann die Schleife wenn Ihr Wörterbuch, so dass Sie einen Exchange zu jedem von ihnen zuweisen und speichern diesen Benutzername/Exchange in einem neuen Wörterbuch

For Each strUserName As String In _UserIdDictionary.Keys 
     _ExchangeServicesMainThread.Add(strUserName, InitializeService(strUserName)) 
    Next 
+0

Thank du für deine Antwort! Zu schlecht haben sie keinen accesstoken. Ich kann keinen Zugang zum Exchange als Admin bekommen, also wird dies für mich keine Option sein. Trotzdem ist es hilfreich zu wissen, dass es keinen AccessStoken gibt. – Arnout