EWS - 使用服务帐户进行模拟

时间:2011-10-11 00:07:12

标签: wcf impersonation exchangewebservices

在我们的组织中,我们尝试使用EWS托管API从Exchange 2010上的自定义UI客户端访问邮箱。我们在IIS 7.5上运行.NET 4.0 WCF服务,代表UI客户端调用EWS方法。客户端和WCF服务通过https进行通信,WCF服务和EWS也是如此。我们现在想要创建服务帐户(基本上是在某些电子邮件收件箱中具有模拟权限的AD帐户)并在这些服务帐户下运行WCF服务。但是,当我在IIS中的特定AD用户下运行WCF服务时(匿名身份验证启用匿名用户身份设置为特定AD用户),EWS会抛出401 Unauthorized异常。检查ExchangeService对象时,Credentials对象为null。如果我对凭证进行硬编码,则该服务可以访问EWS。下面是我用来创建ExchangeService对象的代码。

var service = new ExchangeService(ExchangeVersion.Exchange2010)
 {
     Url = new Uri(ConfigurationManager.AppSettings["EWSUrl"]),
     // If I uncomment the below line, the service can access EWS. However, I want the user under which the service is running to access EWS.
     //Credentials = new NetworkCredential("ImpersonatingUser", "secretPwd", "TESTDOMAIN"),
     ImpersonatedUserId = new ImpersonatedUserId { Id = emailAddress, IdType = ConnectingIdType.SmtpAddress },
 };

我在某处读到System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity对象将拥有运行该服务的当前用户。但是,在我的情况下,System.ServiceModel.ServiceSecurityContext.Current上下文为空。

如何获取服务帐户的凭据(不在代码中对其进行硬编码)并将其传递给EWS?如果您需要更多详细信息,请与我们联系。

编辑:在IIS 7.5中,我创建了一个在模拟AD用户身份下运行的独立应用程序池,并将我的WCF服务配置为在此应用程序池中运行。仍然无法获得服务凭证。

提前致谢。

1 个答案:

答案 0 :(得分:1)

除非您的WebService在Exchange框上运行,否则您需要配置Kerberos。 NTLM不允许凭证授权。

另一种选择是切换到使用SSL保护的基本身份验证。但这意味着在客户端应用程序中松开单点登录。