Мы выступаем в качестве поставщика услуг в SSO, инициированном IDP, используя SAML 2.0. Мы используем Saml2SecurityTokenHandler для извлечения токена из ответа SAML. Подписанное утверждение. Но следующее исключение возникает, когда элемент ds: KeyInfo отсутствует в элементе ds: Signature . SecurityTokenHandler ожидает, что KeyInfo будет присутствовать в утверждении со знаком. Но согласно спецификации SAML 2.0 KeyInfo не является обязательным элементом и может отсутствовать.
Получено исключение:
System. 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));
}
}
- В нескольких ответах (подписанное подтверждение SAML) от того же стороннего IDP отсутствует значение KeyInfo, в то время как другие ответы имеют это значение. ВПЛ непоследователен в своих ответных действиях. В чем может быть причина?
- Обязателен ли элемент KeyInfo для подписанного подтверждения ответа SAML?
- Как избежать этого исключения, даже если IDP пропускает элемент в своем ответе?