public void resignAssertion(Assertion assertion) throws SignatureException { final Signature signature = assertion.getSignature(); if (signature == null) { signSamlObject(assertion); return; } final String digestAlgorithm = ((SAMLObjectContentReference) signature.getContentReferences().get(0)).getDigestAlgorithm(); signSamlObject( assertion, signature.getSignatureAlgorithm(), signature.getCanonicalizationAlgorithm(), digestAlgorithm); }
protected Signature getSignature(SignableSAMLObject target) { org.opensaml.xmlsec.signature.Signature signature = target.getSignature(); Signature result = null; if (signature != null && signature instanceof SignatureImpl) { SignatureImpl impl = (SignatureImpl) signature; try { result = new Signature() .setSignatureAlgorithm(AlgorithmMethod.fromUrn(impl.getSignatureAlgorithm())) .setCanonicalizationAlgorithm(CanonicalizationMethod.fromUrn(impl .getCanonicalizationAlgorithm())) .setSignatureValue(org.apache.xml.security.utils.Base64.encode(impl.getXMLSignature() .getSignatureValue())) ; //TODO extract the digest value for (ContentReference ref : ofNullable(signature.getContentReferences()).orElse(emptyList())) { if (ref instanceof SAMLObjectContentReference) { SAMLObjectContentReference sref = (SAMLObjectContentReference) ref; result.setDigestAlgorithm(DigestMethod.fromUrn(sref.getDigestAlgorithm())); } } } catch (XMLSignatureException e) { //TODO - ignore for now } } return result; }