【问题标题】:Why won't the Saml2SecurityHandler create a token using ReadToken from a string I've just created using WriteToken?为什么 Saml2SecurityHandler 不会从我刚刚使用 WriteToken 创建的字符串中使用 ReadToken 创建令牌?
【发布时间】:2013-04-08 16:54:52
【问题描述】:

所以我需要序列化一个令牌以通过 Azure 中的队列 + NetMessageBinding 发送到服务。令牌来自 ACS,经过一番折腾后,我得到了 Saml2SecurityToken,我可以将其写入字符串:

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());
}

但是,如果我随后尝试从 tokenString 重新创建 Saml2SecurityToken,如下所示:

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 将其发送到另一个服务?

【问题讨论】:

    标签: security serialization token access-token saml-2.0


    【解决方案1】:

    哦,这可能是一些编码问题,好像我使用它获取字符串然后一切正常:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      相关资源
      最近更新 更多