Travailler avec SAML 2.0 en C# .NET 4.5

Je suis en train de l'utiliser pur .NET (pas de classes externes, les contrôles, les aides) pour créer un SAML message. J'ai trouvé un code sur les interwebs; c'est ce que j'ai:

private static SamlAssertion createSamlAssertion()
{
    //Here we create some SAML assertion with ID and Issuer name. 
    SamlAssertion assertion = new SamlAssertion();
    assertion.AssertionId = "AssertionID";
    assertion.Issuer = "ISSUER";
    //Create some SAML subject. 
   SamlSubject samlSubject = new SamlSubject();
    samlSubject.Name = "My Subject";

    //
    //Create one SAML attribute with few values. 
    SamlAttribute attr = new SamlAttribute();
    attr.Namespace = "http://daenet.eu/saml";
    attr.AttributeValues.Add("Some Value 1");
    //attr.AttributeValues.Add("Some Value 2");

    attr.Name = "My ATTR Value";

    //
    //Now create the SAML statement containing one attribute and one subject. 
    SamlAttributeStatement samlAttributeStatement = new SamlAttributeStatement();
    samlAttributeStatement.Attributes.Add(attr);
    samlAttributeStatement.SamlSubject = samlSubject;

    //Append the statement to the SAML assertion. 
    assertion.Statements.Add(samlAttributeStatement);

    //return assertion
    return assertion;

}

et ici c'est le code que j'utilise pour obtenir le code XML:

var sb = new StringBuilder();
var settings = new XmlWriterSettings
{
    OmitXmlDeclaration = true,
    Encoding = Encoding.UTF8
};
using (var stringWriter = new StringWriter(sb))
using (var xmlWriter = XmlWriter.Create(stringWriter, settings))
using (var dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter))
{
    var samlAssertSerializer = new SamlSerializer();
    var secTokenSerializer = new WSSecurityTokenSerializer();
    assertion.WriteXml(
        dictionaryWriter,
        samlAssertSerializer,
        secTokenSerializer
    );
}

Cela semblait comme si c'était d'aller travailler. Toutefois, le message est produit est SAML version 1.0 - j'ai besoin de travailler avec 2.0.

Je sais que je peux faire quelques mouillée de travail et de remplacer certaines valeurs, ici et là, et ce système fonctionne très bien. Il y a très peu de différences dans le message, la version étant la plus importante.
Je vais avoir un moment difficile de trouver des informations sur SAML 2.0 .NET. Je ne sais SAML 2.0 a été mis en œuvre dans .NET récemment. Je suis à l'aide de Framework 4.5, donc je devrais avoir accès à elle. La page MSDN pour SamlAssertion dit le "majorVersion" est une constante, toujours la valeur "1".

Je devine qu'il y a un autre espace de noms j'ai pu travailler avec, mais je n'ai pas trouvé.
Mon exigence est juste pour obtenir le code XML SAML message. Je n'ai pas besoin de signer avec X509, je n'ai pas besoin de jeton. Juste le SAML message XML.

Encore une fois, c'est une question d'essayer de trouver comment faire cela en natif .NET. J'ai trouvé plusieurs SAML d'aides et de beaucoup de code sur la façon de construire le message manuellement - j'essaie de trouver la bonne solution, si elle existe.

EDIT: j'ai trouvé que je peux utiliser Saml2Assertion. Cependant, je suis incapable de trouver un moyen d'obtenir de la SAML message écrit en xml maintenant.

EDIT2: j'ai trouvé comment écrire le Saml2Assersion objet xml. Malheureusement, il ne tient pas de la SAML syntaxe, il écrit dans le plus pur XML sans <saml> balises.

  • Personnellement, j'ai choisi d'utiliser une bibliothèque de bc, il permet de gagner du temps. Vous pouvez utiliser une bibliothèque comme ceci componentpro.com/saml.net pour vous aider, vous et samlcomponent.net a des exemples de code.
  • Besoin d'ajouter la référence à System.IdentityModel.dll et ajouter le Système.IdentityModel.Les jetons de l'espace de noms.
InformationsquelleAutor bugnuker | 2013-03-20