Arbeiten mit SAML 2.0 in C # .NET 4.5

Ich versuche, reines .NET (keine externen Klassen, Steuerelemente, Helfer) zu verwenden, um eine SAML-Nachricht zu erstellen. Ich habe Code in den Interwebs gefunden. das ist was ich habe:

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;

}

Und hier ist der Code, den ich verwende, um das XML zu erhalten:

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
    );
}

Das schien zu funktionieren. Es wird jedoch die Nachricht SAML Version 1.0 ausgegeben - ich muss mit 2.0 arbeiten.

Ich weiß, ich kann ein bisschen schlampig arbeiten und hier und da einige Werte ersetzen, und dieses System würde gut funktionieren. Es gibt nur sehr geringe Unterschiede in der Nachricht, wobei die Version die wichtigste ist. Es fällt mir schwer, Informationen zu SAML 2.0 für .NET zu finden. Ich weiß, dass SAML 2.0 kürzlich in .NET implementiert wurde. Ich verwende Framework 4.5, daher sollte ich Zugriff darauf haben. Die MSDN-Seite für SamlAssertion besagt, dass "majorVersion" eine Konstante ist, die immer auf "1" gesetzt ist.

Ich vermute, es gibt einen anderen Namespace, mit dem ich arbeiten könnte, aber ich habe ihn nicht gefunden. Meine Anforderung ist nur, die XML-SAML-Nachricht zu erhalten. Ich muss nicht mit X509 unterschreiben, ich brauche den Token nicht. Nur die SAML-XML-Nachricht.

Auch dies ist eine Frage, mit der versucht wird, herauszufinden, wie dies in nativem .NET getan werden kann. Ich habe mehrere SAML-Helfer und eine Menge Code zum manuellen Erstellen der Nachricht gefunden. Ich versuche, die RICHTIGE Lösung zu finden, falls sie vorhanden ist.

EDIT: Ich habe festgestellt, dass ich Saml2Assertion verwenden kann. Es ist mir jedoch nicht möglich, die SAML-Nachricht jetzt in XML zu schreiben.

EDIT2: Ich habe herausgefunden, wie man das Saml2Assersion-Objekt in xml schreibt. Leider wird die SAML-Syntax nicht beibehalten, es wird in reinem XML ohne geschrieben<saml> Stichworte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage