Назад | Перейти на главную страницу

Почему я не могу преобразовать это утверждение с помощью AD FS?

У меня есть IP-STS, который выдает заявку, содержащую амперсанд. Используя AD FS в доверии поставщика утверждений, я не могу его изменить. Если я уберу амперсанд из утверждения, оно преобразуется правильно.

Каков правильный синтаксис для преобразования заявления?

Входящая претензия:

<saml:Attribute AttributeName="facid" AttributeNamespace="http://esat.to/identity/claims/fwltc">
  <saml:AttributeValue>Foo's Pharmacy &amp; Rehab (555-123-4567)</saml:AttributeValue>
</saml:Attribute>

Правило преобразования (не совпадает):

c:[Type == "http://esat.to/identity/claims/fwltc/facid", Value == "Foo's Pharmacy & Rehab (555-123-4567)"]
 => issue(Type = "http://esat.to/identity/claims/fwltc/facid", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = "FOO", ValueType = c.ValueType);

Правило преобразования №2 (также не совпадает):

c:[Type == "http://esat.to/identity/claims/fwltc/facid", Value == "Foo's Pharmacy &amp; Rehab (555-123-4567)"]
 => issue(Type = "http://esat.to/identity/claims/fwltc/facid", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = "FOO", ValueType = c.ValueType);

По какой-то причине амперсанд препятствует сопоставлению AD FS. Если вы используете пользовательский интерфейс для создания преобразования, вы обнаружите, что AD FS создает соответствие регулярному выражению:

c:[Type == "http://esat.to/identity/claims/fwltc/facid", Value =~ "^(?i)Foo's\ Pharmacy\ &\ Rehab\ \(555-123-4567\)$"]
 => issue(Type = "http://esat.to/identity/claims/fwltc/facid", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = "FOO", ValueType = c.ValueType);

Это дает тот же эффект, но позволяет избежать проблемы с сопоставлением амперсанда.