[英]'Malformed reference element' when signing SAML assertion with x509 certificate
我正在构建一个SAML IdP来处理学生门户和第三方系统之间的SSO。 我的代码基于CoverMyMeds测试工具 ,我在我的项目中使用了一些未经修改的库。 我还设置了他们的示例身份提供程序,以便更轻松地调试此问题。
我在此基础上构建的用于处理身份验证的页面从学生门户获取GUID,使用它从内部服务检索学生详细信息并将其打包成SAML断言,然后在发送之前使用x.509证书进行签名关闭第三方SAML服务提供商。 我在这里被卡住了。 尝试签署SAML请求时,我会收到:
格式错误的参考元素http://tennysonhull.com/Public/StackOverflow/SigningSAMLAssertionError.png
我所做的调试和研究似乎表明代码不是问题,但只是让你理解我是如何得到的: ComputeSignature()
调用来自CertificateUtility - > AppendSignatureToXMLDocument方法 ,该方法是从SAML20Assertion调用的- > SerializeAndSignSAMLResponse方法 ,由IdPLauncher.aspx页面间接调用。
这是在我尝试签署包之前断言的样子 。 我已经彻底检查了这一点并通过调试器运行它而没有发现它的问题。
我的假设是证书有问题,为了测试目的而自签名。 我正在与之合作的公司向我保证,其他已集成的人过去曾使用过测试证书,但我认为没有其他理由可以解决这个问题。 虽然我尝试了很多变化,但我认为最有可能根据我的研究生成工作测试证书的命令是: makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\\iGradTest.cer"
,但结果证书仍然存在同样的问题。 生成的证书已被赋予友好名称,并设置为使用winhttpcertcfg与IIS协同工作。 应用程序成功获取证书,但在尝试将其添加到断言时失败。
我不知道接下来要做什么。 任何有关识别和解决此问题的后续步骤的建议将不胜感激。 感谢您抽出时间阅读/协助。
您遇到的异常意味着引用的URI
不会解析为标记有ID
属性的另一个元素。
根据提供的代码,SAML20Assertion.cs:90在ID之前加上#
,然后CertificateUtility.cs:69再次预先设置它。 从其中一个位置移除它,一切都很顺利。
SAML20Assertion.cs:90:
CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, "#" + ((AssertionType)Response.Items[0]).ID, SigningCert);
应该
CertificateUtility.AppendSignatureToXMLDocument(ref xmlResponse, ((AssertionType)Response.Items[0]).ID, SigningCert);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.