Web services MessageSecurityException:EncryptedKey子句未使用所需的加密令牌';System.IdentityModel.Tokens.X509SecurityToken';

Web services MessageSecurityException:EncryptedKey子句未使用所需的加密令牌';System.IdentityModel.Tokens.X509SecurityToken';,web-services,wcf,certificate,wcf-binding,saml,Web Services,Wcf,Certificate,Wcf Binding,Saml,我已经用SAML实现创建了一个Wcf服务。我也在使用联邦绑定。当我在同一台机器上同时运行客户机和主机服务时,我可以从我的客户机应用程序轻松访问托管在WCF web服务上的服务。我使用证书进行身份验证(SAML实现) 为您提供信息,我在客户端有一个作为身份提供者的自定义模块。主机服务只是有一些函数,这些函数是使用wsfederationbinding公开的 现在的问题是,当我在不同的系统上运行我的WCF服务主机,并在不同的系统上运行客户端应用程序(具有身份提供者的消费者)时,我会收到以下错误消息

我已经用SAML实现创建了一个Wcf服务。我也在使用联邦绑定。当我在同一台机器上同时运行客户机和主机服务时,我可以从我的客户机应用程序轻松访问托管在WCF web服务上的服务。我使用证书进行身份验证(SAML实现)

为您提供信息,我在客户端有一个作为身份提供者的自定义模块。主机服务只是有一些函数,这些函数是使用wsfederationbinding公开的

现在的问题是,当我在不同的系统上运行我的WCF服务主机,并在不同的系统上运行客户端应用程序(具有身份提供者的消费者)时,我会收到以下错误消息

  MessageSecurityException: The EncryptedKey clause was not wrapped with the required encryption token 'System.IdentityModel.Tokens.X509SecurityToken'.

注意:我觉得客户端和主机服务之间的证书不匹配。

我已经解决了上述问题,实际上上述错误的根本原因是证书不匹配。 我在一个SAML论坛上读到了关于SAML证书认证过程的文章,上面说

  • 令牌在客户端使用公共证书加密
  • 在服务器端(在我的例子中是Webservice主机),使用证书的私钥对接收到的令牌进行解密
  • 所以,在我的例子中,客户端的证书与服务器端的证书不同

    分辨率:

    只需从服务器端(在我的例子中是Webservice主机)导出证书,然后在客户端导入相同的证书

    注意:有2个证书,客户端证书和服务器证书在双方(客户端和服务器端)。 因此,在现实中,当客户端希望访问主机web服务(动态)时,就像下载应用程序一样,我们需要在服务端创建两个证书,并在激活客户端应用程序时将这些证书部署到客户端。这样证书将同步