目的是使用stux处理器验证saml EntitiesDescriptor签名,以确保使用的内存量较低。
我一直在使用以下代码与Apache Santuario的https://developer.android.com/training/improving-layouts/reusing-layouts.html没有任何运气。
请有人建议如何将Apache Santuario与SAML实体描述符文件一起使用。
可以找到SignatureUtils example
网址网址=新网址(“here”);
// 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);
}
答案 0 :(得分:0)
在你的saml文档中,签名位于根元素urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor,而在Colm O hEigeartaigh's test中,签名位于子元素上(urn:example: PO:PaymentInfo)
。我尝试签署根元素urn:example:po:在Colm O hEigeartaigh示例中的PurchaseOrder,并在此blog comment中报告了相同的错误。
我按照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签名,使用封装签名对其进行签名并管理以验证签名。因此,我建议您使用封装签名来签署根元素。