我有一个基于SOAP的SVC Web服务,该服务调用了第三方SOAP服务。此第三方肥皂服务需要一个肥皂标头,其中应包括二进制安全性令牌和其他安全性内容。我是通过创建一个肥皂扩展并将其注册在
之类的web.config中来实现的<webServices>
<soapExtensionTypes>
<add type="NAMESPACE.SecureMessageSoapExtension, ASSEMBLY" priority="1" group="High" />
</soapExtensionTypes>
</webServices>
我的服务(实际上叫第三方)也应该接受soap标头和来自其客户端的所有安全性。
我创建了一个客户端,并在那里实现了相同的soap扩展。我可以看到,来自客户端的传出消息具有soap标头和所有必需的安全元素,例如安全令牌,加密密钥,规范化等
现在,问题是我无法获得如何在服务端验证请求的方法,因为在向我的服务传入请求的情况下,上述肥皂扩展类不起作用(ProcessMessage未被命中)。 / p>
我的服务在.NET中。它是基于SOAP的SVC服务。
下面是我从客户端获得的Soap标头。我需要首先验证Binary安全令牌(相对于数据库中的令牌),然后验证消息摘要
<soap:Header>
<wsse:Security mustUnderstand="1">
<wsse:BinarySecurityToken wsu:Id="X509-c8ea63fd-906f-42a2-88e7-095077351376" ValueType="http://www.SOMETHING.com#CustomToken" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">ACHWZlOWSVdW8pi9NZFBoCdfhuxkEhCg7V7BuAx5O_64kUwmqXJ8mcSDJiVroGmf-pm1teKhRYIaNnIfZzk58tWM0mzHhcT8PEeuSP676hW7FjVHrcBybxfhQpFwOHonSNSMYhbq7kEzliXBt9m86EKcyOSY3HT5yPxOH-jMf6kRDQqXsHUQEVcbwP8AFsKtV-sDNdg3LBPkAcHB3irqPvl2sw7R8hicsZXM4sOwE7E</wsse:BinarySecurityToken>
<Signature Id="SIG-7726920b-33e6-4bc8-bc1a-cebf6d3760dd" xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces PrefixList="soap" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" />
</CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="#id-9df3dad9-08cb-4771-aad6-536e8d547a8d">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>SWTDSonxPz1RDpQ9pd0pOffR/paQDIDRV3CaoND0ZO4=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>JPZrvt8wfDbKQhPSVsxPzxHGjM/a7vpD+sySxW/egK0BHLvxKmDm2zMztE/okInL1DfA0jSjqou5qsXPJek0W5TglzUqN4Kgmgt6Zmg/C78jMvOb5BUmGkm26Af2dfZ7g/kAJ3sRaGXTPEAuliH0KDoA2SvXWm0YghmPE0Tf3Mh3DBszFCwhHUtr8QbBHCu7Jjr46PiqD72wMBAvIS1tgbJgeb2U87Y/UpDxe7xIEjQt09N/w0RsAVaOKERxPvqUIBeIGz0G6CvXBgbgRgTMEdgGXGWDMohsD09ydMiWq9lAludJy8ru3lLP1aF+CPGHFCT7qgU4pqKn6TxrnGjCUQ==</SignatureValue>
<KeyInfo Id="KI-c055e297-0d9c-4104-a56b-caa2a918967c">
<wsse:SecurityTokenReference wsu:Id="STR-a8321c11-302f-4447-b9d5-554ea954546d">
<wsse:Reference URI="#X509-c8ea63fd-906f-42a2-88e7-095077351376" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" />
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
</wsse:Security>
我们非常感谢您的帮助。
是否有一种方法甚至可以在进入Web方法之前访问传入的请求消息。