SAML响应签名断言缺少KeyInfo元素

时间:2018-09-17 11:47:23

标签: c# saml-2.0 adfs x509 idp

我们正在使用SAML 2.0在IDP发起的SSO中充当服务提供商。我们正在使用Saml2SecurityTokenHandler从SAML响应Signed断言中检索令牌。但是,当 ds:Signature 元素中缺少 ds:KeyInfo 元素时,会发生以下异常。 SecurityTokenHandler希望KeyInfo出现在Signed断言中。但是根据SAML 2.0规范,KeyInfo不是必需元素,可以不存在。

收到异常:

System.IdentityModel。 SignatureVerificationFailedException:ID4037 :无法通过以下安全密钥标识符'SecurityKeyIdentifier(IsReadOnly = False,Count = 1,Clause [0]来解析验证签名所需的密钥。 = System.IdentityModel.Tokens.Saml2SecurityKeyIdentifierClause)”。 确保使用所需的密钥填充SecurityTokenResolver。

代码段:

foreach (XmlElement assertionNode in _assertionElements)
{
    using (var reader = new XmlNodeReader(assertionNode))
    {
        Saml2SecurityTokenHandler tokenHandler = new Saml2SecurityTokenHandler();
        var securityToken = tokenHandler.ReadToken(reader); // Exception triggered.
        tokenHandler.DetectReplayedToken(securityToken);
        tokenHandler.ValidateConditions(securityToken.Assertion.Conditions, false);

        claimList.Add(tokenHandler.CreateClaims(securityToken));
    }
}
  1. 来自同一第三方IDP的很少响应(SAML响应签名断言)缺少KeyInfo值,而其他响应具有此值。 IDP的响应行为不一致。可能是什么原因?
  2. SAML响应签名的断言是否必须使用KeyInfo元素?
  3. 即使IDP缺少响应中的元素,如何避免这种异常?

0 个答案:

没有答案