如何验证 SAMLv2 响应是否来自 IdP?
How to validate whether SAMLv2 response is from IdP?
我正在构建一个使用 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 />
。这两个字段包含什么?我应该如何验证响应是否由有效服务器返回?
签名是标准的XML signatures. This validation can for example be done in java using OpenSAML. Here is a blogpost说明了如何。
IDP 的"validity" 或信任是您必须在申请中确定的事情。如果签名有效,则意味着 SAML 消息是从具有相应私钥的 IDP 发送的。然后你必须决定你是否信任那个 IDP。
我正在构建一个使用 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 />
。这两个字段包含什么?我应该如何验证响应是否由有效服务器返回?
签名是标准的XML signatures. This validation can for example be done in java using OpenSAML. Here is a blogpost说明了如何。
IDP 的"validity" 或信任是您必须在申请中确定的事情。如果签名有效,则意味着 SAML 消息是从具有相应私钥的 IDP 发送的。然后你必须决定你是否信任那个 IDP。