您好我将此XML作为我的IDP的SAML2响应:
<Assertion ID="_97031c65-0139-4047-a416-9495df5d6ed7"
IssueInstant="2016-10-26T07:45:43.438Z" Version="2.0"
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>
</Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod
Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<ds:Reference URI="#_97031c65-0139-4047-a416-9495df5d6ed7">
<ds:Transforms>
<ds:Transform
Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<ds:DigestValue>
KMaF...
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
FHdZ....
</ds:SignatureValue>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>
MII....
</X509Certificate>
</X509Data>
</KeyInfo>
</ds:Signature>
....
现在我想检查一下来自我的IDP的响应是否是有效的响应。如何才能做到这一点? (我正在使用OpenSAML 3.x java) 仅仅对签名和证书进行字符串比较是否足够?
我还有一个MetadataDocument.XML,其中包含我的IDP(Azure)的凭据信息。
答案 0 :(得分:2)
首先要做的事情:
不要推广自己的SAML实施。有太多东西你可以弄错,不值得冒这个风险。我不知道我是否可以强调这一点。使用开源,众所周知且经过测试的实施,例如Shibboleth SP或simplesamlphp
除了上面的警告,并假设您是为了您自己的理解而这样做,而不是作为产品/服务的一部分,除了您之外的任何人都可以使用:
检查响应来自您的IDP的方法是检查数字签名。为此,您必须使用IDP的公钥(包含在您从IDP元数据中知道的IDP证书中)以验证数字签名。请阅读Digital Signatures,Digital Signature verification,了解需要完成的工作和原因。然后,您可以通过阅读Official Documetnation继续了解如何操作。一些说明: