我正在构建一个使用SAMLv2对用户进行身份验证的应用程序。在身份提供商成功进行身份验证后,将响应返回给浏览器,然后将其发送到目标服务器。
修剪后的响应如下所示:
<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/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#uuid-73c06e86-88d2-4204-91f4-3d484bc782cc">
<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/2000/09/xmldsig#sha1" />
<ds:DigestValue>H9ffPJ6/jq25p13BcziR0hNLkGg=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>FegjeGwQO..J7hpJEQ==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate><!-- certificate data --></ds:X509Certificate>
</ds:X509Data>
<!-- more certificates -->
</ds:KeyInfo>
</ds:Signature>
我有一系列X509证书<ds:DigestValue />
和<ds:SignatureValue />
。这两个字段包含什么以及如何验证响应是否由有效服务器返回?
答案 0 :(得分:1)
签名是标准XML signatures。例如,可以使用OpenSAML在java中完成此验证。 Here is a blogpost显示了如何。
IDP的“有效性”或信任是您必须在申请中确定的。如果签名验证则表示SAML消息是从具有相应私钥的IDP发送的。然后你必须决定你是否相信这个IDP。