Estoy tratando de implementar una solución SAML SSO en .Net, pero estoy teniendo un problema al analizar la afirmación.cómo analizar una solicitud aserción SAML en .Net
Tengo una aserción de muestra (se parece a byte[]
datos como texto) y el archivo correspondiente .p7b
.
quiero cargar las claves de la .p7b
y descifrar la afirmación de un documento XML.
hasta ahora creo que estoy leyendo las teclas correctamente:
// 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;
entonces trato de analizar la afirmación consigo un problema:
// 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;
Esta última afirmación se produce una excepción, expresando que no puede analizar el contenido XML.
Creo que esto significa que me falta un paso para descifrar la afirmación: obtener el byte[]
como texto convertido a un documento XML en formato SAML.
Alguien sabe cómo añadir este paso? ¿Me estoy perdiendo algo más?
Gracias por publicar la forma en que lo tienes trabajo. Simplemente me ahorró mucho tiempo. –