我想做点什么
outputIdentity.Claims.Add(new Claim("Claim1", "<test>Hi</test>"))
但是,响应标头中的安全节点本身将其显示为
<Attribute Name="Claim1"><AttributeValue><test>Hi</test></AttributeValue></Attribute>
我知道它们是保留的XML字符,但是我不能指定我想在我的属性中使用该节点结构吗?
注意:我也尝试将其包装在CDATA中,但它也会序列化该标签。当我替换翻译的字符时,它可以工作。
答案 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类是否能正确处理,但它值得一试,并且比引入自定义处理程序更容易。