C# 需要WCF客户端在编码器触摸消息之前执行签名行为
由于向IRS提交消息的一些非常具体的要求,我必须使用自定义编码来创建MTOM消息。问题是,在编码器完成处理后,消息不再是XML,因为它必须为附件创建边界和标题 这是非常有问题的,因为此自定义编码是在端点行为之前执行的,我已将其配置为使用X509证书对出站消息进行签名。配置如下:C# 需要WCF客户端在编码器触摸消息之前执行签名行为,c#,wcf,ws-security,C#,Wcf,Ws Security,由于向IRS提交消息的一些非常具体的要求,我必须使用自定义编码来创建MTOM消息。问题是,在编码器完成处理后,消息不再是XML,因为它必须为附件创建边界和标题 这是非常有问题的,因为此自定义编码是在端点行为之前执行的,我已将其配置为使用X509证书对出站消息进行签名。配置如下: <behaviors> <endpointBehaviors> <behavior name="SigningBehavior"> <clientCred
<behaviors>
<endpointBehaviors>
<behavior name="SigningBehavior">
<clientCredentials>
<clientCertificate findValue="serial goes here" x509FindType="FindBySerialNumber"
storeLocation="CurrentUser" storeName="My" />
<serviceCertificate>
<defaultCertificate findValue="serial goes here" x509FindType="FindBySerialNumber"
storeLocation="CurrentUser" storeName="My" />
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
在执行自定义编码之前,是否有办法让WCF客户端签名并添加WS-security标头?您应该向该博客作者咨询。他是WCF方面的专家
我还没有达到你的目的。工作包括MTOM。您是如何将有效负载添加为MTOM附件的?我使用的是mtomMessageEncoding messageVersion=“Soap11”。然后我意识到IRS需要GZip编码。你应该向这个博主咨询一下。他是WCF方面的专家
我还没有达到你的目的。工作包括MTOM。您是如何将有效负载添加为MTOM附件的?我使用的是mtomMessageEncoding messageVersion=“Soap11”。然后我意识到IRS需要GZip编码。哦,这不容易。我定制了gzipMessageEncoding,并使其引用Microsoft Austria的SOAP实现,并将附件作为innerMessageEncoding,而不是WCF内置的MTOM编码。这样我就提前知道附件和边界将使用什么id值,从而可以正确设置HTTP头(特别是内容类型头)。我发现,在消息进入WCF管道后,您不能在任何时候修改或添加HTTP头。因此,它们必须提前设置。下一条消息我将在SWA编码写入方法中详细介绍MTOM moreNow,这是我进行签名和其他操作的地方。当然,签约是最后一个。需要将内联附件BulkExchangeFile内容替换为xop:Include,并使用与MTOM附件id匹配的href属性。然后,在这之后,我进行x509签名,它返回到外部gzip编码,然后连接到IRS。在成功使用SignedXml类加载整个SOAP消息(引用3个头ID)并从中获得几乎有效的签名元素后,我现在被困在无效的WS头上。但它并没有按照IRS的要求使用SecurityTokenReference。相反,它在KeyInfo元素中使用了同样有效的(根据W3C)X509Data和X509Certificate元素。不幸的是,他的解决方案都不适用于我们,因为MTOM编码完全破坏了出站消息中XML文档的任何概念。因此,WCF中内置的X509签名实用程序在这种情况下是无用的。感谢提供详细信息。我想这就是你所说的实现。哦,这不容易。我定制了gzipMessageEncoding,并使其引用Microsoft Austria的SOAP实现,并将附件作为innerMessageEncoding,而不是WCF内置的MTOM编码。这样我就提前知道附件和边界将使用什么id值,从而可以正确设置HTTP头(特别是内容类型头)。我发现,在消息进入WCF管道后,您不能在任何时候修改或添加HTTP头。因此,它们必须提前设置。下一条消息我将在SWA编码写入方法中详细介绍MTOM moreNow,这是我进行签名和其他操作的地方。当然,签约是最后一个。需要将内联附件BulkExchangeFile内容替换为xop:Include,并使用与MTOM附件id匹配的href属性。然后,在这之后,我进行x509签名,它返回到外部gzip编码,然后连接到IRS。在成功使用SignedXml类加载整个SOAP消息(引用3个头ID)并从中获得几乎有效的签名元素后,我现在被困在无效的WS头上。但它并没有按照IRS的要求使用SecurityTokenReference。相反,它在KeyInfo元素中使用了同样有效的(根据W3C)X509Data和X509Certificate元素。不幸的是,他的解决方案都不适用于我们,因为MTOM编码完全破坏了出站消息中XML文档的任何概念。因此,WCF中内置的X509签名实用程序在这种情况下是无用的。感谢提供详细信息。我想这就是你所说的实现。