Утверждения модели идентичности с символами XML внутри них - PullRequest
0 голосов
/ 22 июля 2011

Я бы хотел сделать что-то вроде

 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 голосов
/ 23 июля 2011

Можете ли вы попробовать перенести значение в раздел CDATA? Как:

<![CDATA[<test>Hi</test>]]>
Не уверен, что ваш класс SecurityTokenHandler будет обрабатывать это должным образом, но это стоит попробовать, и проще, чем введение пользовательских обработчиков.
0 голосов
/ 23 июля 2011

Сериализация маркеров безопасности выполняется с помощью 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 />

...