我已经使用SAML实现创建了一个Wcf服务。我正在使用联邦绑定。从我的客户端应用程序中,当我在同一台计算机上运行客户端和主机服务时,我可以轻松访问我的WCF Web服务上托管的服务。我已经使用证书进行身份验证(SAML实现)。
为了您的信息,我在客户端有自定义模块作为身份提供者。主机服务只有一些使用 wsfederationbinding 公开的功能。
现在的问题是,当我在另一个系统上运行我的WCF服务主机在不同的系统和客户端应用程序(具有身份提供者的消费者)时,我收到以下错误消息
MessageSecurityException: The EncryptedKey clause was not wrapped with the required encryption token 'System.IdentityModel.Tokens.X509SecurityToken'.
注意:我觉得客户端和主机服务之间存在一些不匹配的证书。
答案 0 :(得分:1)
我已经解决了上述问题,实际上上述错误的根本原因是证书不匹配。 我在其中一个SAML论坛上阅读了 SAML证书身份验证程序,其中说明了
因此,就我而言,客户端的证书与服务器端的证书不同。
决议:
只需从服务器端导出证书(在我的情况下是Webservice主机),然后在客户端导入证书。
注意:双方(客户端和服务器端)都有2个证书,客户端证书和服务器证书。 所以实际上,当客户想要(动态地)访问主机Web服务时,就像下载应用程序一样,我们需要在服务端创建两个证书,并在激活客户端应用程序时将这些证书部署到客户端。这样证书将是同步。