У меня есть IP-STS, который выдает заявку, содержащую амперсанд. Используя AD FS в доверии поставщика утверждений, я не могу его изменить. Если я уберу амперсанд из утверждения, оно преобразуется правильно.
Каков правильный синтаксис для преобразования заявления?
Входящая претензия:
<saml:Attribute AttributeName="facid" AttributeNamespace="http://esat.to/identity/claims/fwltc">
<saml:AttributeValue>Foo's Pharmacy & 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 & 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);
Это дает тот же эффект, но позволяет избежать проблемы с сопоставлением амперсанда.