如何使用WCF签署SOAP请求

我有第三方SOAP Web服务。 我需要调用其中一个方法。 请求需要签名。 我如何签署请求?

我假设通过签名表示您使用客户端安装的证书对邮件进行签名。

在WCF中这样做相对容易。 假设您在安全元素中使用wsHttpBinding ,则必须将模式设置为SecurityMode.Message 。 您还必须将message元素的clientCredentialType设置为MessageCredentialType.Certificate 。

然后,您必须设置端点行为并配置clientCertificate元素 ( clientCredentials元素的子元素 )以指示客户端证书的存储位置。

即使您没有使用wsHttpBinding,当您希望使用客户端证书提供消息级安全性时,大多数其他绑定的配置也几乎相同。

如果您通过HTTPS进行呼叫,请注意您必须将security元素的mode属性设置为Mode.TransportWithMessageCredential。

以下是有关使用WCF使用需要签名的Amazon SOAP服务的问题。 我认为答案给出了一个很好的例子,这可能对你的情况有所帮助。

如何使用SOAP和不使用WSE在.NET中签署Amazon Web服务请求

编辑:显然有一些关于其他StackOverflow问题链接的混淆。 我想指出最高投票选出的答案。 它绝对是WCF解决方案。 您会注意到inheritance自IClientMessageInspector(WCF接口)的SigningMessageInspector类。 我认为本节可能会对您有所帮助。

基于@casperOne非常有用的答案,我最终得到了以下配置:

                              

这适用于https上的soap客户端