2011-01-05 8 views
9

Je charge un jeton SAML à partir d'un fichier XML.Lecture des attributs SAML à partir de SAML Token

string certificatePath = @"D:\Projects\SAMLDemo\Server.pfx"; 
X509Certificate2 cert = new X509Certificate2(certificatePath, "shani"); 

string samlFilePath = @"D:\Projects\SAMLDemo\saml.xml"; 
XmlReader reader = XmlReader.Create(samlFilePath); 

List<SecurityToken> tokens = new List<SecurityToken>(); 
tokens.Add(new X509SecurityToken(cert)); 

SecurityTokenResolver outOfBandTokenResolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(new ReadOnlyCollection<SecurityToken>(tokens), true); 
SecurityToken securityToken = WSSecurityTokenSerializer.DefaultInstance.ReadToken(reader, outOfBandTokenResolver); 

SamlSecurityToken deserializedSaml = securityToken as SamlSecurityToken; 

Comment lire les attributs SAML depuis deserializedSaml?

J'ai besoin de valeurs de chaîne pour les attributs.

+0

Il n'est vraiment pas nécessaire de mettre "C#" dans la ligne d'objet, puisque vous l'avez dans les balises. –

+0

est-ce SAML 1 ou 2? La documentation de la classe 'System.IdentityModel' semble se rapporter à SAML 1.1 plutôt qu'à 2. – Rory

+0

Ah, maintenant je vois .net 4.5 a des classes nommées comme' Saml2XXX', par ex. 'Saml2Assertion' http://msdn.microsoft.com/fr-fr/library/microsoft.identitymodel.tokens.saml2.saml2assertion.aspx – Rory

Répondre

9

Cela ne fonctionne-t-il pas?

foreach (SamlStatement statement in deserializedSaml.Assertion.Statements) 
{ 
    SamlAttributeStatement attributeStatement = statement as SamlAttributeStatement; 
    if (null != attributeStatement) 
    { 
    foreach (SamlAttribute attribute in attributeStatement.Attributes) 
    { 
     DoWhateverYouLikeWith(attribute); 
    } 
    } 
}