我有第三方SOAP Web服务。我需要调用它的一个方法。请求需要签名。我该如何签署请求?
答案 0 :(得分:6)
我认为通过签名意味着您使用安装在客户端的证书对邮件进行签名。
在WCF中这样做相对容易。假设您使用wsHttpBinding中的security element,则必须将模式设置为SecurityMode.Message。您还必须将clientCredentialType of the message element设置为MessageCredentialType.Certificate。
然后,您必须设置端点行为并配置clientCertificate element(clientCredentials element的子级)以指示客户端证书的存储位置。
即使您没有使用wsHttpBinding,当您希望使用客户端证书提供消息级安全性时,大多数其他绑定的配置也基本相同。
如果您通过HTTPS进行呼叫,请注意您必须将security元素的mode属性设置为Mode.TransportWithMessageCredential。
答案 1 :(得分:1)
以下是有关使用WCF使用需要签名的Amazon SOAP服务的问题。我认为答案给出了一个很好的例子,可能对你的情况有所帮助。
How to sign an Amazon web service request in .NET with SOAP and without WSE
编辑:对于其他StackOverflow问题的链接显然存在一些混淆。我想指出投票选出的最高答案。它绝对是WCF解决方案。您将注意到继承自IClientMessageInspector(WCF接口)的类SigningMessageInspector。我认为本节可能会对您有所帮助。
答案 2 :(得分:0)
在@casperOne非常有用的答案的基础上,我最终得到了以下配置:
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding>
<security mode="TransportWithMessageCredential">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<!-- specifies the endpoint to use when calling the service -->
<endpoint address="https://SomeEndPointUrl/v1"
binding="wsHttpBinding"
behaviorConfiguration="SigningCallback"
contract="ServiceReference1.EboxMessagePortType" name="MyBindingConfig">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="SigningCallback">
<clientCredentials>
<clientCertificate findValue="*somecertsubjectname*"
storeLocation="LocalMachine"
storeName="TrustedPublisher"
x509FindType="FindBySubjectName"
/>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
这是针对https的肥皂客户端