2014-10-28 108 views
1

我构建了一个SAML IdP来处理学生门户和第三方系统之间的SSO。我的代码基于CoverMyMeds Test Harness,我在我的项目中使用了一些未改变的库。我还设置了他们的示例身份提供者,以便更轻松地调试此问题。使用x509证书签署SAML断言时'格式错误的引用元素'

我从该基础构建的页面处理身份验证需要学生门户网站的GUID,使用它从内部服务检索学生详细信息并将其打包到SAML断言中,然后使用x.509证书,然后将其发送给第三方SAML服务提供商。在这里,我卡住了。当试图签署SAML请求我收到:

Malformed Reference Element http://tennysonhull.com/Public/StackOverflow/SigningSAMLAssertionError.png

我已经做了调试和研究似乎表明,该代码是没有问题的,但只是让你知道我是怎么来的:在ComputeSignature()来自CertificateUtility -> AppendSignatureToXMLDocument method的呼叫来自SAML20Assertion -> SerializeAndSignSAMLResponse method,该呼叫被IdPLauncher.aspx page间接呼叫。

This is what the assertion looks like在我试图签署包裹之前。我已经仔细检查了这一点,并通过调试器运行它,但未发现问题。

我的假设是证书有问题,为了测试目的,证书是自签名的。我与之合作的公司向我保证,其他已经整合过的人在过去曾使用过测试认证,但我可以想到没有其他原因会导致失败。尽管我已经尝试了很多变体,但我认为最有可能根据我的研究生成工作测试证书的命令是:makecert.exe -a md5 -r -pe -n "CN=iGradTest" -ss my -sr localmachine -sky signature "c:\iGradTest.cer",但生成的证书仍然存在相同的问题。生成的证书已被赋予一个友好的名称,并设置为使用winhttpcertcfg与IIS一起使用。该应用程序正在成功获取证书,但尝试将其添加到断言时失败。

我不知道下一步该做什么。任何意见后续步骤来确定和解决这个问题将不胜感激。感谢您花时间阅读/协助。

回答

3

您遇到的异常意味着该引用的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); 
+0

这奏效了!非常感激。 – 2014-10-29 09:24:44