在一条规则中发布多个声明

有一种简单的方法可以在单个ADFS声明规则中发布多个声明吗? 我能看到的唯一例子是查询属性存储的例子,每个检索的列映射到不同的索赔types。

我尝试了一种使用Types而不是Type的“显而易见”的方法,将两种types放在方括号中(按照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); 

其中incomingClaimtype1type2value1value2是简单的string文字, incomingMatch是一个正则expression式。

当然,我可以将其作为多重索赔规则来做,但是我现在希望保持简单。 – 现在要出现〜5个传出的声明,但是我想要设置一些用户来获得所有的声明,而不必设置5个规则。 索赔的数量将随着时间的推移而增加。

(我只标记为ADFS – 我看不到任何其他明显的标签,包括)

ADFS规则由条件, =>标记,命令( issueadd )组成,并以分号结尾。 您不能为每个规则发出多个文字,但是您可以使用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的区别? 我用复制和粘贴。

米奇的方法是正确的,这里有一个基本的问题。 使用上面提到的cmdlet:

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

将用文本文件的内容replace所有的发行转换规则。 纠正我,如果我错了,但在这种方法没有“追加”选项。 此外,我不确定是否真的尝试过,但这会导致错误。 PS期望每一条规则开始:

 @RuleName = "$Rulename" 

如果多个规则只有一个规则名称,ADFS会提示一个错误(我实际上没有尝试过)。 如果您想使用cmdlet,最好的工作select是让文本文件如下所示:

 @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中编写代码相对来说比较容易,但对于基本上非常相似的声明规则而言,有多个规则名称是令人讨厌的。 如果你真的可以在一个规则声明中发出多个声明,那还是最好的。 我希望这个function可以在未来添加。