Я пытаюсь реализовать решение SAML SSO в .Net, но у меня возникла проблема с анализом утверждения.
У меня есть образец утверждения (выглядит как byte [ ]
данные в виде текста) и соответствующий файл .p7b
.
Я хочу загрузить ключи из .p7b
и расшифровать утверждение в XML-документ.
] Пока мне кажется, что я правильно читаю ключи:
// get the key data
byte[] certificateData = System.IO.File.ReadAllBytes("myKeys.p7b");
// decode the keys
var cms = new SignedCms(SubjectIdentifierType.IssuerAndSerialNumber);
cms.Decode(certificateData);
var samlCertificates = cms.Certificates;
Затем я пытаюсь проанализировать утверждение, у меня возникает проблема:
// we have a keychain of X509Certificate2s, we need a collection of tokens
var certificatesAsTokens =
from X509Certificate2 cert in samlCertificates
select new X509SecurityToken(cert) as SecurityToken;
// get a token resolver
var tokens = new ReadOnlyCollection<SecurityToken>(
certificatesAsTokens.ToList());
var resolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(
tokens, true);
// get the SAML data in an XML reader
var reader = XmlReader.Create(assertionPostStream);
// use the WS Security stuff to parse the reader
var securityToken = WSSecurityTokenSerializer.
DefaultInstance.ReadToken(reader, resolver) as SamlSecurityToken;
Этот последний оператор выдает исключение, заявляя, что он не может проанализировать содержимое XML.
Я думаю, это означает, что я m отсутствует шаг расшифровки утверждения - получение байта []
в виде текста, преобразованного в XML-документ в формате SAML.
Кто-нибудь знает, как добавить этот шаг? Я что-то упустил?