IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识

Posted

技术标签:

【中文标题】IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识【英文标题】:IIS 7 hosted WCF service using domain account for app pool identity 【发布时间】:2011-03-16 14:20:06 【问题描述】:

我正在尝试做一些我认为应该非常简单的事情,但我一点运气都没有。我在 IIS 7 中托管了一个简单的 Hello World WCF 服务。该服务使用默认应用程序池运行良好。但是,当我创建一个新的应用程序池并使用域帐户运行该应用程序池时,我在调用该服务时遇到错误。我确定我需要进行配置更改,但是我不知道它们是什么。我得到的错误是

“安全支持提供程序接口 (SSPI) 身份验证失败。服务器可能未在身份为“host/ep2t-ifs01”的帐户中运行。如果服务器在服务帐户(例如网络服务)中运行,请指定帐户的 ServicePrincipalName 作为服务器的 EndpointAddress 中的标识。如果服务器在用户帐户中运行,请将帐户的 UserPrincipalName 指定为服务器的 EndpointAddress 中的标识。"

我对这种类型的安全性不是很了解,所以没有什么建议太简单了。在这一点上的任何帮助将不胜感激。这是我的 web.config 文件中的相关部分:

【问题讨论】:

【参考方案1】:

这个问题相当棘手。以下是您可以检查以了解问题的资源列表(按特定顺序):

http://msdn.microsoft.com/en-us/library/bb463274.aspx http://msdn.microsoft.com/en-us/library/ms733130.aspx http://msdn.microsoft.com/en-us/library/bb628618.aspx

最后,您可能需要为您的域帐户创建一个 SPN,该帐户链接到您要部署到的服务器。这需要域管理员权限。更多信息here

【讨论】:

【参考方案2】:

由于某种原因,我的 web.config 部分没有保存...

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="basicServiceBehavior">
      <serviceMetadata httpGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="WebSyncPrototypeMVCApp.Service1" behaviorConfiguration="basicServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="WebSyncPrototypeMVCApp.IService1" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

【讨论】:

以上是关于IIS 7 托管 WCF 服务使用域帐户作为应用程序池标识的主要内容,如果未能解决你的问题,请参考以下文章

与 FQDN 一起使用时,WCF TransportCredentialOnly 安全中断

使用 IIS7、WCF Rest、自定义身份验证模块进行模拟

从 Windows 应用程序访问托管在 IIS 上的 WCF 服务时出现问题

WCF 托管在 IIS6 上

如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?

在域帐户下运行的 WCF 服务