MessageSecurityException:EncryptedKey子句未包含所需的加密令牌'System.IdentityModel.Tokens.X509SecurityToken'

时间:2013-02-07 12:20:37

标签: web-services wcf certificate wcf-binding saml

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我已经解决了上述问题,实际上上述错误的根本原因是证书不匹配。 我在其中一个SAML论坛上阅读了 SAML证书身份验证程序,其中说明了

  1. 使用客户端的公共证书加密令牌。
  2. 在服务器端(在我的情况下是Webservice Host),使用证书的私钥解密收到的令牌。
  3. 因此,就我而言,客户端的证书与服务器端的证书不同。

    决议:

    只需从服务器端导出证书(在我的情况下是Webservice主机),然后在客户端导入证书。

    注意:双方(客户端和服务器端)都有2个证书,客户端证书和服务器证书。 所以实际上,当客户想要(动态地)访问主机Web服务时,就像下载应用程序一样,我们需要在服务端创建两个证书,并在激活客户端应用程序时将这些证书部署到客户端。这样证书将是同步。