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

Выдавайте несколько заявок в одном правиле

Есть ли простой способ подать несколько утверждений в одном правиле утверждения ADFS? Единственный пример, который я могу видеть, - это те, которые запрашивают хранилище атрибутов, и каждый полученный столбец сопоставляется с другим типом утверждения.

Я пробовал "очевидный" подход использовать Types скорее, чем Type, заключив два типа в скобки (как в примере SQL), но затем мне нужно указать несколько значений, поэтому я решил использовать Values скорее, чем Value. Но он задыхается от Types все равно расстаться.

Это не работает:

c:[Type == incomingClaim, Value =~ incomingMatch]
 => issue(Types = (type1,type2), Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer,
      Values = (value1,value2), ValueType = c.ValueType);

куда incomingClaim,type1,type2,value1 и value2 простые строковые литералы, и incomingMatch это регулярное выражение.

Конечно, я мог бы сделать это в виде нескольких правил требований, но пока я надеялся, что все будет проще. - На данный момент будет около 5 исходящих заявок, но я хочу настроить некоторых пользователей, чтобы они получали все заявки без необходимости устанавливать 5 правил. Количество претензий со временем будет увеличиваться.

(Я помечен только как ADFS - я не вижу других очевидных тегов для включения)

Правило ADFS состоит из условия, => токен, команда (issue или add) и оканчивается точкой с запятой. Вы не можете использовать несколько литералов для каждого правила, но можете использовать PowerShell, чтобы упростить работу.

Вместо того, чтобы заходить в пользовательский интерфейс и повторять этот мастер 5 раз, вы можете использовать Set-AdfsRelyingPartyTrust чтобы установить сразу все правила.

Set-RelyingPartyTrust -TargetName SharePoint_Prod -IssuanceTransformRulesFile c:\drop\rules.txt

где rules.txt выглядит как

c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type1, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value1, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type2, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value2, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type3, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value3, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type4, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value4, ValueType = c.ValueType);
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type5, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value5, ValueType = c.ValueType);

Разница относительно UI? Я использовал копирование и вставку.

Хотя подход Митча правильный, здесь есть фундаментальная проблема. Используя упомянутый выше командлет:

Set-RelyingPartyTrust -TargetName SharePoint_Prod -IssuanceTransformRulesFile c:\drop\rules.txt

заменит ВСЕ правила преобразования выдачи содержимым текстового файла. Поправьте меня, если я ошибаюсь, но в этом подходе нет опции «Добавить». Более того, я не уверен, пробовали ли это на самом деле, но это приведет к ошибке. PS ожидает, что каждое правило начинается с:

@RuleName = "$Rulename"

И если для нескольких правил существует только одно имя, ADFS выдаст сообщение об ошибке (на самом деле я не пробовал). Лучший рабочий вариант, если вы хотите использовать командлет, - это иметь текстовый файл примерно так:

@RuleName = "RuleName1"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type1, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value1, ValueType = c.ValueType);

@RuleName = "RuleName2"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type2, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value2, ValueType = c.ValueType);

@RuleName = "RuleName3"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type3, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value3, ValueType = c.ValueType);

@RuleName = "RuleName4"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type4, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value4, ValueType = c.ValueType);

@RuleName = "RuleName5"
c:[Type == incomingClaim, Value =~ incomingMatch] => issue(Type = type5, Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = value5, ValueType = c.ValueType);

Это все еще относительно проще кодировать в PowerShell, но наличие нескольких имен правил для по существу очень похожих правил утверждений является неприятностью. По-прежнему было бы лучше, если бы вы действительно могли выдавать несколько требований в одном утверждении правила. Надеюсь, эту функцию можно будет добавить в будущем.