Details
Description
In Apache CXF v3.1.7, I have a JAX-WS web service client calling a service that requires a HolderOfKey SAML Assertion. The assertions are from a custom service that does not adhere to the WS-Trust SecureTokenService standard, so I am adding them manually in a SAMLCallbackHander, using the callback.setAssertionElement() method.
When invoking the client, the WSS4J framework is unable to compute the signature for the SecurityTokenReference header block, throwing the below error:
{{
javax.xml.crypto.dsig.XMLSignatureException: javax.xml.crypto.dsig.TransformException: org.apache.wss4j.common.ext.WSSecurityException: Referenced token "id-of-SAML-assertion" not found
at org.apache.wss4j.dom.str.STRParserUtil.getTokenElement(StrParserUtil.java:314)
at org.apache.wss4j.dom.transform.STRTransformUtil.dereferenceSTR(STRTransformUtil.java:98)
at org.apache.wss4j.dom.transform.STRTransform.transformIt(STRTransform.java:195)}}
It appears that the SAML assertion DOM Element that is added via the callback.setAssertionElement() method is not getting searched by the STRParserUtil.getTokenElement() method.