【发布时间】:2015-02-21 19:58:51
【问题描述】:
我想创建一项服务,通过 EWS 抓取托管交换服务器(“myclient.onmicrosoft.com”)上所有用户的所有收件箱。
当我连接到同一域中的本地交换服务器时,这已经很有效了。但是当我尝试将此服务连接到托管交换时,它会引发 401(错误授权)错误。当然,这是与托管交换服务器不同的域。 我的服务在本地服务器上运行,并使用“上帝模式”用户对所有活动目录用户进行非个人化。我的问题是:如何将我的本地系统的用户正确连接到不同域中的托管交换?
注意:当我直接使用凭据时它可以工作,并且模拟方式在本地安装上工作。
到目前为止我所做的(我想知道这是正确的方法):在我们的本地服务器上,我创建了一个域“myclient.onmicrosoft.com”,就像在托管服务器和一个 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!
任何想法我缺少什么?
【问题讨论】:
标签: c# impersonation exchangewebservices