当OneLogin Java-SAML工具包的示例应用程序配置为向Shibboleth IdP提供已签名的SP元数据时,IdP会拒绝抱怨签名过程中使用的无效转换的元数据签名。但是,像oXygen编辑器之类的标准XML工具验证签名是成功的。
java-saml-tookit-jspsample-2.2.0应用程序已配置为向IdP(onelogin.saml2.security.sign_metadata = true
)提供已签名的元数据,而IdP的metadata-providers.xml包含使用文件的配置块 - 支持HTTP的签名验证。
此配置有什么问题?
答案 0 :(得分:0)
经过几个小时的谷歌搜索后,我在其他软件中发现了类似的问题。 OneLogin的Java-SAML工具包使用cannonicalization方法来签署合法的元数据,但SAML标准未明确允许。如果您查看SAML2规范的第5.5.4节,则明确说明:
SAML消息中的签名不应包含除以外的转换 包络签名变换(带有标识符) http://www.w3.org/2000/09/xmldsig#enveloped-signature)或 独占规范化转换(带标识符) http://www.w3.org/2001/10/xml-exc-c14n#或 http://www.w3.org/2001/10/xml-exc-c14n#WithComments)。验证者 签名可以拒绝包含其他转换的签名 算法无效。
Java-SAML工具包使用http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments
进行了硬连线设置,而被Shibboleth IdP拒绝。如果你想要开展工作,请从OneLogin下载Java-SAML工具包的源代码,解压缩,然后更改java-saml-2.2.0 / core / src / main / java / com / onelogin / saml2的第1056行来自
String c14nMethod = Constants.C14N_WC;
到
String c14nMethod = Constants.C14NEXC_WC;
使用maven(mvn包)重新编译并重新部署应用程序。