在其中使用XML字符的身份模型声明

时间:2011-07-22 19:55:37

标签: wif saml

我想做点什么

 outputIdentity.Claims.Add(new Claim("Claim1", "<test>Hi</test>"))

但是,响应标头中的安全节点本身将其显示为

<Attribute Name="Claim1"><AttributeValue>&lt;test&gt;Hi&lt;/test&gt;</AttributeValue></Attribute>

我知道它们是保留的XML字符,但是我不能指定我想在我的属性中使用该节点结构吗?

注意:我也尝试将其包装在CDATA中,但它也会序列化该标签。当我替换翻译的字符时,它可以工作。

2 个答案:

答案 0 :(得分:0)

安全令牌的序列化由SecurityTokenHandler完成(在您的情况下可能是Saml11SecurityTokenHandler)。

如果要自定义序列化,则必须通过扩展Saml11SecurityTokenHandler类来覆盖默认行为:

class CustomHandler : Saml11SecurityTokenHandler
{
    public Saml11SecurityTokenHandler()
      : base()
    {
    }

    public Saml11SecurityTokenHandler(SamlSecurityTokenRequirement samlSecurityTokenRequirement)
      : base(samlSecurityTokenRequirement)
    {
    }

    public Saml11SecurityTokenHandler(XmlNodeList customConfigElements)
      : base(customConfigElements)
    {
    }

    protected override void WriteAttribute(XmlWriter writer, SamlAttribute attribute)
    {
        // your code here
    }
}

您还必须在web.config文件中添加自定义安全性令牌处理程序:

<securityTokenHandlers>
  <add type="Your.Namespace.CustomHandler, Your.Dll.Name, Version=1.0.0.0, Culture=neutral" />
</securityTokenHandlers>

编辑:已移除<clear />

答案 1 :(得分:0)

您可以尝试将值包装在CDATA部分吗?如:

<![CDATA[<test>Hi</test>]]>
不确定您的SecurityTokenHandler类是否能正确处理,但它值得一试,并且比引入自定义处理程序更容易。

相关问题