簡體   English   中英

如何在具有模擬功能的托管Exchange上使用EWS?

[英]How to use EWS on hosted Exchange with Impersonation?

我想創建一個服務,該服務通過EWS爬網托管的交換服務器(“ myclient.onmicrosoft.com”)上所有用戶的所有收件箱。

當我連接到同一域中的本地交換服務器時,這已經很好地工作了。 但是,當我嘗試將此服務連接到托管交易所時,它會引發401(錯誤的授權)錯誤。 當然,這是與托管交換服務器不同的域。 我的服務在本地服務器上運行,並使用“上帝模式”用戶來模擬所有活動目錄用戶。 我的問題是:如何將本地系統的用戶正確連接到其他域中的托管交換機?

注意:當我直接使用憑據並且模擬方式確實適用於本地安裝時,它可以工作。

到目前為止,我所做的事情(我不知道這是正確的方法):在本地服務器上,我創建了一個域“ myclient.onmicrosoft.com”,就像在托管服務器和具有相同AD的AD用戶上一樣托管交易所上的名稱和密碼(稱為“ mytest@myclient.onmicrosoft.com”)。

在我的搜尋器服務中,我做了:

  1. 我所有的AD用戶都在我們的本地服務器中

     var allUsers = SearchAllActiveDirectoryUsers(); foreach (DataRow user in allUsers.Rows) { String domainName = (String)user["DomainName"]; String samAccountName = (String)user["SamAccountName"]; String principalName = (String)user["PrincipalName"]; String principalDomainName = (String)user["PrincipalDomainName"]; String mail = (String)user["Mail"]; } 
  2. 然后,對於每個AD用戶,我都將其連接到交換服務,如下所示:

     ExchangeService ex = new ExchangeService(version); ex.Url = new Uri(“https://outlook.office365.com/EWS/Exchange.asmx”); ex.Credentials = new WebCredentials("mytest@myclient.onmicrosoft.com", “XXX”, " myclient.onmicrosoft.com"); // THIS DOES WORK CORRECTLY! ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.PrincipalName, “mytest@myclient.onmicrosoft.com”); //this does NOT work! 

有什么想法我想念的嗎?

您需要使用“上帝模式”用戶的憑據,但是將ImpersonatedUserId設置為AD用戶。 就像是:

ex.Credentials = new WebCredentials("account_with_impersonation_rights@myclient.onmicrosoft.com", "password");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.PrincipalName, "mytest@myclient.onmicrosoft.com");

通過EWS連接到Office 365時,始終需要提供憑據。 您不能使用UseDefaultCredentials = true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM