我之前问过类似的问题,关于如何在 Azure AD 中执行此操作。但是,我得出的结论是,这样做可能太有限了,我没有得到任何答案。
然而,ADFS 具有更大的灵活性。
我想将 Active Directory 用户的组成员身份转换为单个:
分隔/封闭的字符串。因此,如果 AD 用户是 Group1 和 Group2 的成员,则将发出带有字符串值的声明:Group1:Group2:
。或者,最好使用不可变的组的 SID。
根据我的研究,我认为没有任何内置方法可以做到这一点,但也许有人更熟悉可以提供方法的声明规则语言?否则,看起来我可能能够创建一个自定义属性存储,它几乎可以利用我想要处理声明的任何 .NET 代码,如所述这里。
在我开始创建自己的自定义属性存储之前,是否有人知道使用内置 ADFS 功能或利用类似于此的公开提供的自定义属性存储来完成我正在尝试做的事情这里?
我正在运行 ADFS 4.0。
答案1
最好的办法是去自定义属性商店。
索赔规则实际上并不适用于不确定数量的索赔。
答案2
使用 ADFS,可以使用声明发布策略来实现这一点
创建规则“营销”,并使用以下代码作为自定义规则:
c:[Type == "http://temp/variable", Value =~ "(?i)^RSDB-marketing"] => 添加(Type = "http://temp/marketing", Value = RegExReplace(c.Value, "RSDB-", ""));
使用以下代码创建规则 MarketingNotExists:
不存在([Type == "http://temp/variable", Value =~ "RSDB-marketing"]) => 添加(Type = "http://temp/marketing", Value = "");
使用以下代码创建规则销售:
c:[Type == "http://temp/variable", Value =~ "(?i)^RSDB-sales"] => 添加(Type = "http://temp/sales", Value = RegExReplace(c.Value, "RSDB-", ""));
使用以下代码创建规则 SalesNotExists:
不存在([Type == "http://temp/variable", Value =~ "RSDB-sales"]) => 添加(Type = "http://temp/sales", Value = "");
使用以下代码创建规则 RedshiftDbGroups:c:[Type == "http://temp/marketing"] && c2:[Type == "http://temp/sales"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/PrincipalTag:RedshiftDbGroups", Value = c.Value + ":" + c2.Value);
这将创建如下声明:
< 属性名称="https://redshift.amazon.com/SAML/Attributes/PrincipalTag:RedshiftDbGroups" > < 属性值 > marketing:sales</ 属性值>