在建立安全连接之后,我遇到了与非WCF客户端有关的问题,并且请求的URL字符串被传递到服务器。我得到了403禁止的错误,而不是获得401挑战。我有一个适用于WsHTTPBinding
和BasicHTTPBinding
的WCF客户端。在测试WCF客户端之后,我可以通过在调用CertificateName
之前用以下代码行中的空字符串替换serviceProxy.CheckIn()
来使基本身份验证失败:
PermissiveCertificatePolicy.Enact(string.Format("CN={0}", CertificateName));
我猜这是强制客户端接受服务器证书的覆盖,或者它以某种方式将其名称传递给服务器以进行身份验证。
所以我的问题是WCF客户端在请求期间是否将证书名称传递给服务器?如果是这样,我应该在请求字符串中的哪个位置放置它?那会是什么样子?
web.config 文件绑定:
<wsHttpBinding>
<binding name="HIBridge_SSLBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" negotiateServiceCredential="True" establishSecurityContext="True"/>
</security>
</binding>
</wsHttpBinding>
<basicHttpBinding>
<binding name="HIBridge_BasicBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
</security>
<readerQuotas maxStringContentLength="2147483647"/>
</binding>
</basicHttpBinding>