繁体   English   中英

如何使用Apache Santuario验证SAML EntitiesDescriptor签名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM