我们正在使用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));
}
}