“此服务的安全设置需要 Windows 身份验证”客户端证书 WCF 项目的 IIS 错误
Posted
技术标签:
【中文标题】“此服务的安全设置需要 Windows 身份验证”客户端证书 WCF 项目的 IIS 错误【英文标题】:"Security settings for this service require Windows Authentication" IIS error for client certificates WCF project 【发布时间】:2012-07-05 15:24:11 【问题描述】:我已经在互联网(和 SO)上搜索了此问题的解决方案。截至今天,RHS 中出现的所有问题都无法解决我的问题,所以就这样吧。
TLDR:我正在尝试构建需要客户端证书的 WCF 服务,但遇到了以下错误:
此服务的安全设置需要 Windows 身份验证,但 托管此服务的 IIS 应用程序未启用它。
在让服务识别我为测试生成的自签名证书时,我遇到了几个问题。它现在似乎正在工作,因为没有证书的客户端向我显示 403(禁止)的 IIS 错误而不是此异常。
我的服务web.config的相关sn-ps:
<wsHttpBinding>
<binding name="clientCertificateBinding">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
我定义了两个端点:一个用于“mex”(尝试删除它,并不能解决我的问题),一个用于实际服务。服务绑定使用binding="wsHttpBinding" bindingConfiguration="clientCertificateBinding"
作为规范。
稍后,我告诉我的行为使用服务证书:
<behavior name="AwesomeBehaviour">
<serviceMetadata httpsGetEnabled="true"/>
<serviceCredentials>
<serviceCertificate
storeLocation="LocalMachine"
storeName="My"
findValue = 'CN=...' />
</serviceCredentials>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
此外,IIS 设置为要求 SSL 并要求客户端证书。不仅接受它们,而且要求它们。
我已经尝试(正如一些人建议的那样)将安全模式从 Transport
更改为 Message
和 TransportWithMessageCredential
;这没有任何作用。
还有this thread 将 NTLM 和协商作为传输凭据类型进行讨论。这并不能解决我的问题。
还有this KB article 谈论cscript.exe
。我安装了兼容性工具并添加了 NTLM 身份验证提供程序,但无济于事。
我不确定我错过了什么。
【问题讨论】:
【参考方案1】:呃。解决方案有两个:
将配置添加到我的安全标签<transport clientCredentialType="Certificate" />
删除mex
绑定
然后一切正常! \o/
【讨论】:
以上是关于“此服务的安全设置需要 Windows 身份验证”客户端证书 WCF 项目的 IIS 错误的主要内容,如果未能解决你的问题,请参考以下文章