![](/img/trans.png)
[英]Allow impersonation users to login to Exchange Server by EWS Managed API 2.0
[英]How to use EWS on hosted Exchange with Impersonation?
我想創建一個服務,該服務通過EWS爬網托管的交換服務器(“ myclient.onmicrosoft.com”)上所有用戶的所有收件箱。
當我連接到同一域中的本地交換服務器時,這已經很好地工作了。 但是,當我嘗試將此服務連接到托管交易所時,它會引發401(錯誤的授權)錯誤。 當然,這是與托管交換服務器不同的域。 我的服務在本地服務器上運行,並使用“上帝模式”用戶來模擬所有活動目錄用戶。 我的問題是:如何將本地系統的用戶正確連接到其他域中的托管交換機?
注意:當我直接使用憑據並且模擬方式確實適用於本地安裝時,它可以工作。
到目前為止,我所做的事情(我不知道這是正確的方法):在本地服務器上,我創建了一個域“ myclient.onmicrosoft.com”,就像在托管服務器和具有相同AD的AD用戶上一樣托管交易所上的名稱和密碼(稱為“ mytest@myclient.onmicrosoft.com”)。
在我的搜尋器服務中,我做了:
我所有的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"]; }
然后,對於每個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.