我目前正在将Spring SAML 1.0.3实施到我的Spring Boot 2服务器中。
我是SAML联盟的成员,并且在一个巨大的元数据文件中获得了所有IdP和SP的元数据,并为验证元数据提供了单独的公钥。
服务器在启动时无法使用公钥(存在于密钥库中)验证元数据,并抛出
org.opensaml.saml2.metadata.provider.FilterException:
Signature trust establishment failed for metadata entry
我想我已经得出结论,问题出在以下事实:元数据<KeyInfo/>
元素内没有<Signature/>
元素。
使用的默认SignatureTrustEngine
实现是PKIXSignatureTrustEngine
,似乎在<KeyInfo/>
元素内有一个<Signature/>
元素。如果找不到,则元数据验证失败。
我认为我的问题可以通过使用ExplicitKeySignatureTrustEngine
实现来解决,该实现似乎不依赖于<KeyInfo/>
元素进行元数据验证。此实现仅检查已配置密钥库(我将密钥放置在其中)中的密钥。
在验证元数据文件时,如何正确地告诉Spring SAML使用ExplicitKeySignatureTrustEngine
而不是PKIXSignatureTrustEngine
来使用SignatureTrustEngine
?