在 ADFS 查询中从用户返回角色子集
Returning subset of roles from a user in ADFS query
所以我有类似以下 LDAP 查询的内容,我正在尝试添加到 ADFS 自定义声明规则中。
(memberOf=CN=Parent_group,OU=Child_group1,OU=Child_group1,DC=发展)
Parent_group包含我感兴趣的所有组(Child_group1、Child_group2),子组担任我想要的角色。
我当前的 ADFS 规则returns尝试登录的用户下的所有角色
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> add(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"), query = ";tokenGroups;{0}", param = c.Value);
我能否将这些结合起来只提供用户拥有的一部分角色?
编辑:
只是为了扩展下面的答案,这就是我最终得到的:
我使用了两个规则,一个是获取专有名称,第二个使用专有名称来获取我想要的组
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://schemas.com/identity/distinguishedName"), query = "; distinguishedName;{0}", param = c.Value);
c:[Type == "http://schemas.com/identity/distinguishedName"] && c2:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://schemas.com/groups/"), query = "(&(memberOf=CN=Parent_group,OU=Child_groups1,OU=Child_groups2,DC=domain,DC=company,DC=ROOT)(member={0}));CN;{1}", param = c.Value, param = c2.Value);
{0} 使用专有名称将查询缩减为仅与用户相关的组。
{1} 使用 windows 帐户名,因此我不必对 domain/user.
进行硬编码
您需要自定义规则,例如:
c:[类型 == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 颁发者 == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://company.com/claim"), query = "(&(objectClass=user) (memberof=CN=Parent_group,OU=Child_group1,OU=Child_group1,DC=Development));mail;domain\user", param = c.Value);
更新
否 - 如果需要,您可以删除“&(objectClass=user)”。
根据文章,"domain\user" 是必需的。唯一重要的部分是域。您可以为用户输入任何字符串。
所以我有类似以下 LDAP 查询的内容,我正在尝试添加到 ADFS 自定义声明规则中。
(memberOf=CN=Parent_group,OU=Child_group1,OU=Child_group1,DC=发展)
Parent_group包含我感兴趣的所有组(Child_group1、Child_group2),子组担任我想要的角色。
我当前的 ADFS 规则returns尝试登录的用户下的所有角色
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> add(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"), query = ";tokenGroups;{0}", param = c.Value);
我能否将这些结合起来只提供用户拥有的一部分角色?
编辑: 只是为了扩展下面的答案,这就是我最终得到的: 我使用了两个规则,一个是获取专有名称,第二个使用专有名称来获取我想要的组
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://schemas.com/identity/distinguishedName"), query = "; distinguishedName;{0}", param = c.Value);
c:[Type == "http://schemas.com/identity/distinguishedName"] && c2:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://schemas.com/groups/"), query = "(&(memberOf=CN=Parent_group,OU=Child_groups1,OU=Child_groups2,DC=domain,DC=company,DC=ROOT)(member={0}));CN;{1}", param = c.Value, param = c2.Value);
{0} 使用专有名称将查询缩减为仅与用户相关的组。 {1} 使用 windows 帐户名,因此我不必对 domain/user.
进行硬编码您需要自定义规则,例如:
c:[类型 == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 颁发者 == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://company.com/claim"), query = "(&(objectClass=user) (memberof=CN=Parent_group,OU=Child_group1,OU=Child_group1,DC=Development));mail;domain\user", param = c.Value);
更新
否 - 如果需要,您可以删除“&(objectClass=user)”。
根据文章,"domain\user" 是必需的。唯一重要的部分是域。您可以为用户输入任何字符串。