Trabajando con SAML 2.0 en C # .NET 4.5

Estoy tratando de usar .NET puro (no hay clases externas, controles, ayudantes) para crear un mensaje SAML. Encontré algo de código en las interwebs; Esto es lo que tengo:

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;

}

Y aquí está el código que estoy usando para obtener el 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
    );
}

Parecía que iba a funcionar. Sin embargo, el mensaje que se produce es SAML versión 1.0 - Necesito trabajar con 2.0.

Sé que puedo hacer un trabajo descuidado y reemplazar algunos valores aquí y allá, y este sistema funcionaría bien. Hay muy pocas diferencias en el mensaje, siendo la versión la más importante. Me está costando mucho encontrar información en SAML 2.0 para .NET. Sé que SAML 2.0 se implementó en .NET recientemente. Estoy usando Framework 4.5, así que debería tener acceso a él. La página de MSDN para SamlAssertion dice que "majorVersion" es una constante, siempre establecida en '1'.

Supongo que hay otro espacio de nombres con el que podría estar trabajando, pero no lo he encontrado. Mi requisito es solo obtener el mensaje XML SAML. No necesito firmar con X509, no necesito el token. Sólo el mensaje XML de SAML.

Una vez más, esta es una pregunta que intenta descubrir cómo hacer esto en .NET nativo. He encontrado varios ayudantes de SAML y un montón de código sobre cómo generar el mensaje manualmente. Estoy tratando de encontrar la solución CORRECTA, si existe.

EDITAR: He encontrado que puedo usar Saml2Assertion. Sin embargo, no puedo encontrar una manera de obtener el mensaje SAML escrito en xml ahora.

EDIT2: he encontrado cómo escribir el objeto Saml2Assersion en xml. Lamentablemente, no mantiene la sintaxis SAML, escribe en XML puro sin<saml> etiquetas

Respuestas a la pregunta(2)

Su respuesta a la pregunta