我有一个由我自己的Windows应用程序托管的WCF服务。我希望服务使用客户端证书在传输级别验证客户端,并且当客户端与服务通信时,它必须传递客户端用户帐户的Kerberos票证。 Looking around on the internet我发现了服务的这种配置:
<bindings>
<customBinding>
<binding name="Kerberos (MsgHeader) over Transport (Certificate)">
<textMessageEncoding messageVersion="Soap11" />
<security authenticationMode="KerberosOverTransport">
<secureConversationBootstrap />
</security>
<httpsTransport requireClientCertificate="true" />
</binding>
</customBinding>
</bindings>
他们说这种配置适用于微软的帮助。现在,我尝试通过代码复制此配置,因此我使用了以下代码段:
BindingElementCollection elementCollection = new BindingElementCollection();
elementCollection.Add(SecurityBindingElement.CreateKerberosOverTransportBindingElement());
elementCollection.Add(new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap11 });
elementCollection.Add(new HttpsTransportBindingElement() { RequireClientCertificate = true });
return new CustomBinding(elementCollection);
我使用此绑定配置了端点以及绑定到端口的有效证书。然后,我在Visual Studio中的客户端项目中添加了一个服务引用。
为此,everthing工作得很好!我还配置客户端在与服务通信时发送其证书,这也工作正常。但是,当我尝试调用该服务的任何方法时,我收到以下错误:
从另一方收到了无担保或不正确安全的故障。请参阅内部FaultException以获取故障代码和详细信息。
当我检查内部异常时,我发现了以下错误:
处理邮件中的安全令牌时发生错误。
请帮忙吗?我是否需要进一步配置客户端以发送其Kerberos令牌或什么?
P.S。服务和客户端机器时钟是同步的。此外,服务和客户端位于连接到域的两台不同计算机上。