Есть ли простой способ подать несколько утверждений в одном правиле утверждения 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, но наличие нескольких имен правил для по существу очень похожих правил утверждений является неприятностью. По-прежнему было бы лучше, если бы вы действительно могли выдавать несколько требований в одном утверждении правила. Надеюсь, эту функцию можно будет добавить в будущем.