我需要为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应用程序启用。
以下是托管服务的其他详细信息:
我在这些方面已经看到了许多其他问题,但没有一个修复实际上纠正了这个问题。非常感谢您的投入。
答案 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帐户作为工作进程标识。