我试图用纯.NET(无外部类,控制助手)来创建一个SAML消息。 我发现在interwebs一些代码; 这是我有:
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;
}
这里是我使用来获取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
);
}
这似乎就像是去上班。 然而,该消息是生产是SAML版本1.0 - 我需要2.0工作。
我知道我可以做一些工作马虎,并在这里和那里替换一些价值与该系统将正常工作。 有消息非常小的差异,版本是最重要的。 我有一个很难找到的SAML 2.0 .NET信息。 我知道SAML 2.0实现到.NET最近。 我使用的框架4.5,所以我应该有机会获得它。 对于SamlAssertion的MSDN页说,“majorVersion”是一个常数,始终设置为“1”。
我猜还有另外一个名字空间,我可以与一起工作,但我还没有找到它。 我的要求是刚刚拿到XML SAML消息。 我不需要用X509签,我不需要令牌。 就在SAML XML消息。
再次,这是试图找出如何在本地.NET这样做的问题。 我已经发现了几个帮手SAML和大量的代码如何构建manually-我试图找到正确的解决方案,如果它存在的消息。
编辑:我发现我可以使用Saml2Assertion。 但是,我无法找到一个办法让现在写XML的SAML消息。
EDIT2:我已经找到了如何编写Saml2Assersion对象到XML。 可悲的是,它不留SAML的语法,它写入纯XML没有<saml>
标签。