[英]How to validate SAML EntitiesDescriptor Signature with Apache Santuario
目的是使用stux处理器验证saml EntitiesDescriptor签名,以确保使用的内存量很少。
我一直在使用以下代码,并结合Apache Santuario的示例进行了运气。
请提供有人建议如何将Apache Santuario与SAML实体描述符文件一起使用。
可以在这里找到SignatureUtils
URL url =新URL(“ http://metadata.ukfederation.org.uk/ukfederation-metadata.xml ”);
// Validation
List<QName> namesToSign = new ArrayList<QName>();
namesToSign.add(new QName("urn:oasis:names:tc:SAML:2.0:metadata", "EntitiesDescriptor"));
try (InputStream stream = url.openStream()) {
X509Certificate cert = getCertificate();
SignatureUtils.verifyUsingStAX(stream, namesToSign, cert);
}
在您的saml文档中,签名位于根元素urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor上,而在Colm O hEigeartaigh的测试中 ,签名位于子元素上(urn:example:po:PaymentInfo) 。
我尝试在Colm O hEigeartaigh的示例中签署根元素urn:example:po:PurchaseOrder,并在此博客评论中报告了相同的错误。
我遵循Colm O hEigeartaigh的建议,并使用封装的签名在SignatureUtils中签名根元素:
for (QName nameToSign : namesToSign) {
SecurePart securePart = new SecurePart(nameToSign, SecurePart.Modifier.Content);
String[] transforms = new String[2];
transforms[0] = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
transforms[1] = "http://www.w3.org/2001/10/xml-exc-c14n#";
securePart.setTransforms(transforms);
properties.addSignaturePart(securePart);
}
并能够使用SignatureUtils#verifyUsingStAX
验证签名
然后,我删除了文档中的xml签名,使用封装的签名对其进行了签名,并设法验证了签名。 因此,我建议您使用信封签名来签名根元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.