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

Wcf EWS-使用服务帐户进行模拟,wcf,impersonation,exchangewebservices,Wcf,Impersonation,Exchangewebservices,在我们的组织中,我们正尝试使用EWS托管API从Exchange 2010上的自定义UI客户端访问邮箱。我们在IIS 7.5上运行了一个.NET 4.0 WCF服务,它代表UI客户端调用EWS方法。客户端和WCF服务通过https进行通信,WCF服务和EWS也是如此。我们现在希望创建服务帐户(基本上是在某些电子邮件收件箱上具有模拟权限的广告帐户),并在这些服务帐户下运行WCF服务。但是,当我在IIS中的特定AD用户下运行WCF服务时(启用匿名身份验证,并将匿名用户标识设置为特定AD用户),EWS

在我们的组织中,我们正尝试使用EWS托管API从Exchange 2010上的自定义UI客户端访问邮箱。我们在IIS 7.5上运行了一个.NET 4.0 WCF服务,它代表UI客户端调用EWS方法。客户端和WCF服务通过https进行通信,WCF服务和EWS也是如此。我们现在希望创建服务帐户(基本上是在某些电子邮件收件箱上具有模拟权限的广告帐户),并在这些服务帐户下运行WCF服务。但是,当我在IIS中的特定AD用户下运行WCF服务时(启用匿名身份验证,并将匿名用户标识设置为特定AD用户),EWS会引发401未经授权的异常。检查ExchangeService对象时,Credentials对象为空。如果我硬编码凭据,服务可以访问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上下文为null

如何获取服务帐户的凭据(无需在代码中硬编码)并将其传递给EWS?如果你需要更多的细节,请告诉我

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


提前感谢。

除非您的Web服务在Exchange box上运行,否则您需要配置Kerberos。NTLM不允许凭据委派


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

除非您的Web服务在Exchange box上运行,否则您需要配置Kerberos。NTLM不允许凭据委派

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