2013-04-08 3 views
0

Так что мне нужно сериализовать токен для отправки службе через очередь + NetMessageBinding в Azure. Маркер приходит от ACS и после некоторого jiggery pokery У меня есть Saml2SecurityToken и я могу записать его в строку:Почему Saml2SecurityHandler не создает токен, используя ReadToken из строки, которую я только что создал с помощью WriteToken?

SecurityTokenHandlerCollection handlers = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection(); 
var saml2SecurityToken = securityToken as Saml2SecurityToken; 
using (var memoryStream = new MemoryStream()) 
{ 
    using (var xmlWriter = new XmlTextWriter(memoryStream, Encoding.UTF8)) 
    { 
     handlers.WriteToken(xmlWriter, saml2SecurityToken); 
    } 

    tokenString = Encoding.UTF8.GetString(memoryStream.GetBuffer()); 
} 

однако, если я затем попытаться воссоздать Saml2SecurityToken из tokenString так:

if (tokenString != null) 
{ 
    using (var stringReader = new StringReader(tokenString)) 
    { 
     using (var xmlReader = new XmlTextReader(stringReader)) 
     { 
      securityToken = handlers.ReadToken(xmlReader); 
     } 
    } 
} 

или если я использую

securityToken = handlers.ReadToken(tokenString); 

тогда SecurityToken всегда нуль.

Что мне не хватает? Как я могу начать сериализацию своего токена, чтобы я мог отправить его через wcf в другую службу?

ответ

1

D'ах, это, вероятно, какой-то вопрос кодирования, как если бы я получить строку, используя это, то все работает нормально:

var saml2SecurityToken = securityToken as Saml2SecurityToken; 

var stringBuilder = new StringBuilder(); 
using (var xmlWriter = new XmlTextWriter(new StringWriter(stringBuilder, CultureInfo.InvariantCulture))) 
{ 
    handlers.WriteToken(xmlWriter, saml2SecurityToken); 
}