【问题标题】:How to use EWS on hosted Exchange with Impersonation?如何通过模拟在托管 Exchange 上使用 EWS?
【发布时间】:2015-02-21 19:58:51
【问题描述】:

我想创建一项服务,通过 EWS 抓取托管交换服务器(“myclient.onmicrosoft.com”)上所有用户的所有收件箱。

当我连接到同一域中的本地交换服务器时,这已经很有效了。但是当我尝试将此服务连接到托管交换时,它会引发 401(错误授权)错误。当然,这是与托管交换服务器不同的域。 我的服务在本地服务器上运行,并使用“上帝模式”用户对所有活动目录用户进行非个人化。我的问题是:如何将我的本地系统的用户正确连接到不同域中的托管交换?

注意:当我直接使用凭据时它可以工作,并且模拟方式在本地安装上工作。

到目前为止我所做的(我想知道这是正确的方法):在我们的本地服务器上,我创建了一个域“myclient.onmicrosoft.com”,就像在托管服务器和一个 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!
    

任何想法我缺少什么?

【问题讨论】:

    标签: c# impersonation exchangewebservices


    【解决方案1】:

    您需要使用“上帝模式”用户的凭据,但将 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

    【讨论】:

    • 谢谢杰森!我的本地域只有一个上帝模式用户,但远程域没有。 Office 365 是否提供创建此类管理员用户的方法?
    • @JasonJohnston 我不明白如果你有 mytest@myclient.onmicrosoft.com 应该怎么做
    猜你喜欢
    • 2016-04-08
    • 2011-05-07
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2017-04-22
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多