IIS 6.0上的WCF中的集成Windows身份验证

时间:2009-05-27 06:44:50

标签: wcf iis authentication

我需要为IIS 6.0(Windows Server 2003)上托管的WCF服务实现集成Windows身份验证,而不使用证书。要求是在特定Active Directory组中的用户访问服务时简单地对其进行身份验证。正在使用的Framework版本是3.0。

WCF配置:

以下是服务的web.config文件的“绑定”部分:

<bindings>
<basicHttpBinding>
<binding name="Binding1">
    <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" />
    </security>
</binding>
</basicHttpBinding>

</bindings>

没有“mex”端点。

即使虚拟目录以及.svc文件的安全设置在IIS中选择了“集成Windows身份验证”,但.svc文件导航到以下时会发生以下错误:

  

此服务的安全设置需要Windows身份验证,但未为承载此服务的IIS应用程序启用。

以下是托管服务的其他详细信息:

  • 该服务在单独的App Pool下运行
  • 应用程序池在应用程序池的“身份”选项卡下配置的单独特权帐户下运行。

我在这些方面已经看到了许多其他问题,但没有一个修复实际上纠正了这个问题。非常感谢您的投入。

4 个答案:

答案 0 :(得分:6)

经过一番挖掘后,我终于发现,如果你将“Windows”改为“Ntlm”,这就行了。 我从来没有能够使用Kerberos,但你提到不想使用证书。

如果您仍然遇到问题,可以查看NTAuthenticationProviders下有关网站的IIS配置数据库中的内容。如果你只想使用Ntlm,你需要将该字符串设置为“NTLM”,并且你需要确保它在你的传输clientCredentialType中说“Ntlm”而不是“Windows”,否则你将获得异常你引用原帖。

相反,如果有人遇到此错误并且他们想要使用Kerberos证书(如果可用),他们应该检查元数据库NTAuthenticationProviders是否说“Negotiate,NTLM”。这是默认设置,但对于我今天尝试运行WCF服务的VM而言,这是神秘的不同(最终将我带到了这个线程!)

答案 1 :(得分:4)

根据我对WCF的经验,很难正确配置所有内容 - 很多反复试验!但我发现以下链接非常有用,因为它为不同的方案提供了清单:CodePlex - WCF Security Guide和主要的WCF部分:WCF Security

我查看了我的应用场景的清单,并解决了问题。希望有所帮助!

答案 2 :(得分:0)

NTLM的工作方式与Windows不同。如果你真的想要Windows,只需删除一段代码

即可
bindingConfiguration="your_basicHttpBinding_binding_name"
从端点

。这应该有用。

答案 3 :(得分:-2)

确保取消选中“启用匿名访问”。

如果任何这些适用于您的案例

,也许您可​​以尝试强制执行NTML身份验证
  • 通过配置worker来隔离虚拟目录级别的Web站点 处理身份不同 域帐户。

  • 您正在使用集成Windows身份验证,未使用WINS 或运行IIS的服务器的DNS名称,并且您希望使用本地用户帐户或LocalService帐户作为工作进程标识。

请参阅:http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/524404dc-8586-46b0-89ac-0f5db6d33c9c.mspx?mfr=true