SOAP WCF 将 Signature 和 BinarySecurityToken 添加到标头
Posted
技术标签:
【中文标题】SOAP WCF 将 Signature 和 BinarySecurityToken 添加到标头【英文标题】:SOAP WCF add Signature and BinarySecurityToken to header 【发布时间】:2020-08-29 05:19:17 【问题描述】:我需要更多东西,签名必须在 Header 标记内的 Security 标记内,并带有 BinarySecurityToken 元素
就像:
<soapenv:Header> <!-- extrac of the example file -->
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-D53CCD6983E4CE0BD7142791021078262">
MIIDbDgg4iF74cqiF6NcnzBnD9qA2MB6hSo38e0RISilEFSzWikDqBtOjgm7ux9fdeHojDm4uvhsSfbEyGmGTAQRzg9yIiD3ovjOzuZsf+I3HWS9F6xl6sb2+wvYXD4DFk/OD+N7UszGsoWFZg
</wsse:BinarySecurityToken>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
.....
</ds:Signature>
我可以像这样以编程方式直接从客户端证书填充 xml 元素:
var cert = new X509Certificate2(ClientCertificateFilePath, ClientCertificatePassword);
var export = cert.Export(X509ContentType.Cert, ClientCertificatePassword);
var base64 = Convert.ToBase64String(export);
问题是如何在header中添加Signature和BinarySecurityToken?
【问题讨论】:
见下文:***.com/questions/46722997/… 【参考方案1】:手动编写 SOAP 信封来调用服务可能是一种选择。 这里有一些关于如何添加 SOAP 标头的讨论。What is the Java Apache CXF equivalent of C# WCF AddressHeader? 这通常是因为服务器端的 web 服务不是 WCF,因此我们可能无法通过 WCF 调用服务。 在我看来,上述 SOAP 信封格式决定了 WCF 使用的绑定的通道形状,这可能与使用证书对客户端进行身份验证的 WCF 服务兼容。
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
当服务器使用证书对客户端进行身份验证时,客户端使用相同的绑定类型并向服务器提供证书,并在 SOAP 信封中附加证书的签名。 下面是 Fiddler 捕获的与服务器端通信时的 Http 流量。他们的肥皂信封很相似。 有关使用证书验证客户端的更多信息,请参阅以下链接。https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/message-security-with-a-certificate-clienthttps://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-certificate-authentication 如果有什么可以帮助的,请随时告诉我。
【讨论】:
以上是关于SOAP WCF 将 Signature 和 BinarySecurityToken 添加到标头的主要内容,如果未能解决你的问题,请参考以下文章
将 WCF SOAP 和 WCF REST 服务托管为 Azure 应用服务
WCF IErrorHandler 将 FaultException 返回给 SOAP,将 WebHttpException 返回给 POX 和 Json 端点