use*_*336 5 xml opensso signature saml xml-signature
我们在服务提供商网站上使用OpenSAML为我们的客户提供SSO.我们的客户(ID提供商)正在使用OpenSSO.OpenSSO发布的SAML响应在签名元素方面略有不同,因为它不受命名空间限定.这似乎与OpenSAML相关并且它从samlResponse.getSignature()方法返回null
,因此我无法验证签名.
<Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#s2d10cccbd58d1f78c2c76c74c82a236548c929ffd">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>j+KBoDOtEcyCquPTxRCXoBulStQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Dv+owuZfGFymGGrw2gHA3/7GVC6mXt8JMW+tOvmtnjTRJZaDE+Nb2NCngio1Tnqu4LWnvVrry4Wk... 6QcIJi/kGc4YFMSQj/Q=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIEhDCCA+2gAwIBAgIQXxhipi2wpPxWi7MTVfFVHDANBgkqhkiG9w0BAQUFADCBujEfMB0GA1UE... 78Q/lRQuBhHMy02lKctnwjBeEYA=</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
Run Code Online (Sandbox Code Playgroud)
<dsig:Signature xmlns="http://www.w3.org/2000/09/xmldsig#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<dsig:Reference URI="#id-TtLltjcBSOAJ6OipumUEj8o0Qag-">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>5c95zhA139qzMvZA2A445F3LWaU=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>JsmRFJn1CjClHs4rf0hrwKzOq6ZtmnOEm/PNiaJvYurko/ZP+PApWhk55x0unIVwZ6XDv3k8Dj81WqUl07J0Dkvzp71bccIgiGTRzoNPT71nBAXxJmZiXz51JWctg13zjxP0oQMSpWytKCrFkCkJ0So3RQl3WixYV3miK0YjJnM=</dsig:SignatureValue>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
</ds:KeyInfo>
</dsig:Signature>
Run Code Online (Sandbox Code Playgroud)
如您所见,OpenSSO服务器中的签名片段不包含SAML绑定规范中指定的命名空间限定符.
对我来说,最后一个选项是对发布的SAMLResponse进行一些按摩,以便将命名空间添加到签名元素中,以使OpenSAML库工作.
关于如何使用OpenSAML库解决这个问题的任何想法都受到高度赞赏.
在此先感谢CJ
小智 0
您也许能够执行一些 DOM 操作来修复 XML。例如,下面是我必须编写的一些代码,用于修复来自客户端的 SAML 响应 XML 中的某些命名空间属性(实际上,命名空间是在 Response 元素中定义的,但需要提取断言并需要保留命名空间)。
Element assertionElem = assertion.getDOM();
if (!assertionElem.hasAttribute("xmlns:saml")) {
assertionElem.setAttribute("xmlns:saml", "urn:oasis:names:tc:SAML:2.0:assertion");
}
if (!assertionElem.hasAttribute("xmlns:ds")) {
assertionElem.setAttribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#");
}
String assertionXml = Serializer.serializeXml(assertionElem, true, true);
Run Code Online (Sandbox Code Playgroud)
您可以将 xmlns="http://www.w3.org/2000/09/xmldsig#" 属性添加到签名中,然后setDOM()进行更新。问题是,是否samlResponse.getSignature().getDOM()会获取 XML,或者是否必须获取整个响应的 DOM 并从中提取 Signature 元素。
当然,实际上,客户端不应该向您发送不正确的命名空间 XML,但我们知道这是怎么回事。
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |