Tous, Je travaille (encore) sur l'appel d'un service Web WSE 3.0 .NET à partir de Java/Metro 2.0. Nous avons les exigences de sécurité définies afin que nous chiffrions le corps & en-tête des messages & signer les en-têtes. Je suis en mesure d'envoyer une demande à leur service & obtenir une réponse, mais Metro est incapable de valider la signature & renvoie une erreur du code WSIT. Je suis le dernier code WSIT de CVS & Voici un extrait de code de la méthode qui fait sauter:Erreur d'espace de noms Metro & StreamBuffer - est-ce que je comprends bien?
de com.sun.xml.ws.security.opt.impl.incoming.GenericSecuredHeader:
private XMLStreamBuffer completeHeader;
public void writeTo(XMLStreamWriter w) throws XMLStreamException {
try {
// TODO what about in-scope namespaces
completeHeader.writeToXMLStreamWriter(w);
} catch (Exception e) {
throw new XMLStreamException(e);
}
}
Comme vous pouvez le voir, il y a un TODO là-dedans, qui indique que la méthode ne peut pas gérer la situation que j'ai, mais je ne suis pas sûr de savoir ce qu'ils entendent par espaces de noms 'in-scope'.
est ici l'extrait de XML de la réponse du service Web qu'il est déferlant sur:
<wsa:Action wsu:Id="Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf">
http://someAction</wsa:Action>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>
/2ivNKDpYSLqPWHzrSxN/RuZ/e8=</DigestValue>
</Reference>
Dans la trace de la pile (inclus ci-dessous), il se plaint de ne pas être en mesure de valider la référence URI = "# Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf ". Ce que je ne comprends pas, c'est: est-ce que cela échoue parce que l'élément Reference n'a pas d'attribut ou de préfixe d'espace de nommage?Devraient-ils être autorisés à hériter de l'espace de nom de l'élément Signature parent ou les classes StreamBuffer ne peuvent-elles pas gérer cela?
Pour contraster, voici un extrait XML similaire de ma demande (générée par WSIT), où le préfixe ds est
xmlns: ds = "http://www.w3.org/2000/09/ xmldsig # "
<ds:Signature xmlns:ns10="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns11="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512"
xmlns:ns12="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" Id="_1">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="wsse S"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_5002">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<exc14n:InclusiveNamespaces PrefixList="S"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>
vtf9n+OcI1nT0exavD4/ZQy6jm8=</ds:DigestValue>
</ds:Reference>
Lorsque Metro génère ces blocs, tout a un préfixe d'espace de nommage.
Si vous lisez encore jusqu'ici - merci! Voici quelques extraits de la trace de la pile:
Error occurred while trying to cache START_ELEMENTcom.sun.xml.stream.buffer.stax
.StreamReaderBufferProcessor$InternalNamespaceContext
[16:12:54.026] WSS1759: Following error null occured while performing canonicali
zation null
[16:12:54.026] javax.xml.stream.XMLStreamException
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.GenericSecuredHeade
r.writeTo(GenericSecuredHeader.java:303)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.StreamWriterData.wr
ite(StreamWriterData.java:101)
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Exc14nCanonicalizer.t
ransform(Exc14nCanonicalizer.java:153)
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Transform.transform(T
ransform.java:182)
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Reference.transform(R
eference.java:183)
[16:12:54.026] at com.sun.xml.ws.security.opt.crypto.dsig.Reference.validate(Re
ference.java:102)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf
oProcessor.processReference(SignedInfoProcessor.java:422)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf
oProcessor.processReferences(SignedInfoProcessor.java:385)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.processor.SignedInf
oProcessor.process(SignedInfoProcessor.java:189)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.Signature.process(S
ignature.java:206)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.h
andleSecurityHeader(SecurityRecipient.java:466)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.c
acheHeaders(SecurityRecipient.java:281)
[16:12:54.026] at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.v
alidateMessage(SecurityRecipient.java:223)
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.verifyInboundMess
age(SecurityTubeBase.java:462)
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientRe
sponsePacket(SecurityClientTube.java:412)
[16:12:54.026] at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processResponse
javax.xml.ws.WebServiceException: com.sun.xml.wss.impl.WssSoapFaultException: WSS1722: Error occurred while validating Reference with URI: #Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0c
f
Pouvez-vous me donner la solution en ce qui concerne la question? [Veuillez cocher ce lien] (http://stackoverflow.com/questions/28696160/error-while-serializing-timestamp-element-occured-while-performing-canonicalizat) –