C# 加密WCF消息密码

C# 加密WCF消息密码,c#,wcf,web-services,security,C#,Wcf,Web Services,Security,负责开发基于Java的Web服务的第三方回到我们这里,要求消息头必须如下所示: <soapenv:Header> <wsse:Security> <xenc:ReferenceList> <xenc:DataReference URI="#EncDataId-1"/> </xenc:ReferenceList> <wsse:UsernameToken> <

负责开发基于Java的Web服务的第三方回到我们这里,要求消息头必须如下所示:

<soapenv:Header>
 <wsse:Security>
     <xenc:ReferenceList>
        <xenc:DataReference URI="#EncDataId-1"/>
     </xenc:ReferenceList>
     <wsse:UsernameToken>
        <wsse:Username>[snip]</wsse:Username>
        <xenc:EncryptedData Id="EncDataId-1" Type="http://www.w3.org/2001/04/xmlenc#Element">
           <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
           <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
              <ds:KeyName>[snip]</ds:KeyName>
           </ds:KeyInfo>
           <xenc:CipherData>
              <xenc:CipherValue>[snip]</xenc:CipherValue>
           </xenc:CipherData>
        </xenc:EncryptedData>
     </wsse:UsernameToken>
  </wsse:Security>
</soapenv:Header>
client.ClientCredentials.UserName.UserName = "[snip]";
client.ClientCredentials.UserName.Password = "[snip]";
和标题:

<s:Header>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <o:UsernameToken u:Id="uuid-e906a1ca-aa63-474c-b4ac-cf9b90ab2435-1">
            <o:Username>[snip]</o:Username>
            <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[snip]</o:Password>
        </o:UsernameToken>
    </o:Security>
</s:Header>

[剪报]
[剪报]
和约束:

<binding name="SMSSoap11">
    <security mode="TransportWithMessageCredential" />
</binding>

WCF不会为您生成此输出。你将不得不为此而写,甚至可能更多。WCF只支持带有现成密码的用户名令牌,您的代码示例甚至与用户名令牌规范的任何部分都不一样。如果目标是在WS-Security中使用加密密码,那么安全标头似乎不完整


您应该询问Java开发人员WS-SecurityPolicy的安全要求是什么?

您可以发布当前SOAP信封的外观吗?你可以使用像Fiddler这样的工具来捕捉它。他们需要它与他们的格式有多接近,因为默认格式有很大的不同(例如,标记名不同)。如果您需要确切的标记名,那么您需要创建自己的消息格式化程序。这里有一篇文章描述了如何做到这一点:如果他们的需求具有一定的灵活性,那么您可能不必走那么远,但我的直觉告诉我,这正是您需要做的。@Pete我已经用当前标题更新了我的问题。我有一种感觉,这将需要一个自定义的解决方案,但也许然后我可以推回到他们带回旧的安全标题。我有一种感觉,这是情况,但不能支持它自己。你的回答使我有信心推回这个要求。