Подпишите часть сообщения SOAP с помощью клиента WCF
Дорогие все
Я должен создать такой SOAP-запрос:
<?xml version="1.0" encoding="UTF-8"?> <soap11:Envelope xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"> <soap11:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> <Reference URI="#Id-1979cedd-0d7d-47d1-b80a-c7cad3a542e4"> <Transforms> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> <DigestValue> … base64-kodierter Hashcode … </DigestValue> </Reference> </SignedInfo> <SignatureValue> … base64-kodierter Signaturwert … </SignatureValue> <KeyInfo> <X509Data> <X509Certificate> … base64-kodiertes Nutzer-Zertifikat … </X509Certificate> </X509Data> </KeyInfo> </ds:Signature> </wsse:Security> </soap11:Header> <soap11:Body> <wst:RequestSecurityTokenResponse xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" Context="1aae57c8-092c-47a4-a5eb-c2ecbc21441d"> <wst:SignChallengeResponse xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Id-1979cedd-0d7d-47d1-b80a-c7cad3a542e4"> <wst:Challenge>1002450673</wst:Challenge> </wst:SignChallengeResponse> </wst:RequestSecurityTokenResponse> </soap11:Body> </soap11:Envelope>
Я мог бы создать такой запрос:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <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"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> <Reference URI="#_1"> <Transforms> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> <DigestValue> base64 coded digest </DigestValue> </Reference> </SignedInfo> <SignatureValue> base64 coded signature </SignatureValue> <KeyInfo> <X509Data> <X509Certificate> base64 coded certifikat </X509Certificate> </X509Data> </KeyInfo> </Signature> </o:Security> </s:Header> <s:Body u:Id="_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <RequestSecurityTokenResponse Context="b28bef60-66dd-48bf-a8a2-8bce19ebd2c0" xmlns="http://docs.oasis-open.org/ws-sx/ws-trust/200512"> <SignChallengeResponse> <Challenge>9380658743</Challenge> </SignChallengeResponse> </RequestSecurityTokenResponse> </s:Body> </s:Envelope>
Я могу создать подписанное сообщение на уровне тела, но я должен подписать сообщение на уровне "signchallengeresponse".
Есть ли у кого-нибудь идея, как я могу сделать это с помощью WCF?
Что я уже пробовал:
- Я использую CustomBinding с AsymmetricSecurityBinding
- Я пытаюсь изменить свое поведение.
imade575
Здравствуйте, вы нашли какие-нибудь зацепки ? потому что я сам застрял в одном и том же месте и понятия не имею, что делать ?
Заранее спасибо