0

我有一个由我自己的 Windows 应用程序托管的 WCF 服务。我希望服务使用客户端的证书在传输级别对客户端进行身份验证,并且当客户端与服务通信时,它必须传递客户端用户帐户的 Kerberos 票证。在互联网上环顾四周,我发现了该服务的配置:

<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 的客户端项目中添加了服务引用。

为此,一切都很好!我还将客户端配置为在与服务通信时发送其证书,这也很好。但是,当我尝试调用服务的任何方法时,我收到以下错误:

从另一方收到不安全或不正确安全的故障。有关故障代码和详细信息,请参阅内部 FaultException。

当我检查内部异常时,我发现了以下错误:

处理消息中的安全令牌时出错。

请问有什么帮助吗?我是否需要进一步配置客户端以发送其 Kerberos 令牌,还是什么?

PS 服务和客户端机器时钟是同步的。此外,服务和客户端位于加入域的两台不同机器上。

4

0 回答 0