我已经创建了一个SamlAssertion的实例,并将授权声明和属性声明添加到它,现在我想打印出XML,这样我就可以做一个HTTP帖子了,但并不是所有的断言都是outputed。我错过了什么(我确定这是头脑发达的东西)?
以下是我正在使用的代码:
// Add the Statements to the SAML Assertion
samlAssert.Statements.Add(samlAuthStatement);
samlAssert.Statements.Add(samlAttrStatement);
MemoryStream xmlStream = new MemoryStream();
XmlDictionaryWriter xmlWriter = XmlDictionaryWriter.CreateTextWriter(xmlStream, System.Text.Encoding.UTF8);
SamlSerializer samlAssertSerializer = new SamlSerializer();
WSSecurityTokenSerializer secTokenSerializer = new WSSecurityTokenSerializer();
samlAssert.WriteXml(xmlWriter, samlAssertSerializer, secTokenSerializer);
xmlStream.Position = 0;
StreamReader sr = new StreamReader(xmlStream, System.Text.Encoding.UTF8);
string AssertStr = sr.ReadToEnd();
TextBox1.Text = AssertStr;
但所有返回的是:
<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="assertID"
Issuer="my Company" IssueInstant="2008-11-19T19:54:12.191Z"
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
<saml:Conditions NotBefore="2008-11-19T19:54:12.191Z" NotOnOrAfter="2008-11-19T19:59:12.191Z"/>
<saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken"
AuthenticationInstant="2008-11-19T19:54:12.191Z">
<saml:Subject>
<saml:NameIdentifier Format="cs-sstc-schema-assertion-1.1.xsd" NameQualifier="My company">xxxx</saml:NameIdentifier>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:SubjectLocality IPAddress="x.x.x.x"/>
</saml:
答案 0 :(得分:4)
如果我在这种情况下给你一个建议,那就是:在处理诸如流的IDisposable对象时总是使用using
语句。除了自动刷新流之外,它还可以在异常的情况下释放资源:
// Add the Statements to the SAML Assertion
samlAssert.Statements.Add(samlAuthStatement);
samlAssert.Statements.Add(samlAttrStatement);
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();
samlAssert.WriteXml(
dictionaryWriter,
samlAssertSerializer,
secTokenSerializer
);
}
TextBox1.Text = sb.ToString();
答案 1 :(得分:0)
我不确定这是否与您的案例直接相关,但这可能是与重新序列化SAML令牌相关的有用信息
http://blogs.msdn.com/govindr/archive/2006/10/24/re-serialize-saml-token.aspx