在C# .NET 4.5中使用SAML 2.0进行工作
在C# .NET 4.5中使用SAML 2.0进行工作
我正在尝试使用纯.NET(没有外部类、控件、助手)来创建一个SAML消息。我在互联网上找到了一些代码;以下是我目前的代码:
private static SamlAssertion createSamlAssertion() { // 在这里创建具有ID和发行者名称的一些SAML断言。 SamlAssertion assertion = new SamlAssertion(); assertion.AssertionId = "AssertionID"; assertion.Issuer = "ISSUER"; // 创建一些SAML主题。 SamlSubject samlSubject = new SamlSubject(); samlSubject.Name = "My Subject"; // // 创建一个具有几个值的SAML属性。 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"; // // 现在创建包含一个属性和一个主题的SAML语句。 SamlAttributeStatement samlAttributeStatement = new SamlAttributeStatement(); samlAttributeStatement.Attributes.Add(attr); samlAttributeStatement.SamlSubject = samlSubject; // 将语句附加到SAML断言。 assertion.Statements.Add(samlAttributeStatement); //返回断言 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版本。
我知道我可以做一些草率的工作,在这个系统中替换一些值,这样就可以正常工作了。消息中几乎没有什么差别,版本是最重要的。
我在寻找有关.NET的SAML 2.0的信息时遇到了困难。我知道SAML 2.0最近被实现到.NET中。我使用的是Framework 4.5,所以应该可以访问它。SamlAssertion的MSDN页面说"majorVersion"是一个常数,始终设置为'1'。
我猜应该还有另一个命名空间可以使用,但是我还没有找到它。
我的要求只是获取XML SAML消息。我不需要使用X509进行签名,也不需要令牌。只需要SAML XML消息。
再次强调,这是一个试图找到在纯.NET中如何做到这一点的问题。我找到了几个SAML助手和很多手动构建消息的代码-我正在尝试找到正确的解决方案,如果它存在的话。
编辑:我发现可以使用Saml2Assertion。然而,我无法找到将SAML消息写入xml的方法。
编辑2:我已经找到了如何将Saml2Assersion对象写入xml。不幸的是,它不保留SAML语法,它以纯XML写入,没有
标签。