如何在ADFS声明规则中拼接多个SAML属性生成自定义DisplayName
ADFS 自定义组合Display Name声明实现方案
ADFS原生支持通过自定义声明规则语言拼接多AD属性生成新的声明值,不需要调整AD侧数据、也不需要第三方应用做改造,直接在对应信赖方信任的声明规则里新增配置即可,具体操作步骤如下:
- 定位目标信赖方配置
打开ADFS管理控制台,依次展开「AD FS」-「信赖方信任」,在右侧列表找到对应第三方应用的信任条目,右键选择「编辑声明颁发策略」。 - 前置校验
确认现有已配置的4条属性传递规则正常运行,能正确从AD拉取到Given-Name(名,对应OID 2.5.4.42)、Surname(姓,对应OID 2.5.4.4)、Title(职务)三个属性的值,这是拼接逻辑生效的基础。 - 新增自定义拼接规则
在声明颁发策略窗口点击「添加规则」,规则模板选择列表最底部的「使用自定义规则发送声明」,点击下一步:- 规则名称可自定义填写,比如
发送组合格式的Display Name声明 - 在自定义规则文本框中填入以下规则代码:
- 规则名称可自定义填写,比如
# 拉取已存在的名、姓、职务声明值,拼接为指定格式后作为Display Name输出 c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/givenname", Issuer == "AD AUTHORITY"] && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", Issuer == "AD AUTHORITY"] && c3:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/title", Issuer == "AD AUTHORITY"] => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname", Value = c1.Value + " " + c2.Value + ", " + c3.Value, Issuer = c1.Issuer, OriginalIssuer = c1.OriginalIssuer, ValueType = c1.ValueType);
- 适配特殊场景调整
- 如果你现有配置里Given-Name、Surname、Title对应的传出声明类型不是上述代码里的默认URN,把c1、c2、c3匹配条件里的
Type值替换为你实际使用的声明类型即可 - 如果第三方应用要求Display Name对应的声明标识不是默认的displayname URN,直接把
issue语句里的Type值替换为对方文档要求的准确声明URN - 如果存在部分用户未填写Title属性、不想输出结尾多余的逗号空格,可以替换为带空值判断的规则版本:
- 如果你现有配置里Given-Name、Surname、Title对应的传出声明类型不是上述代码里的默认URN,把c1、c2、c3匹配条件里的
c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/givenname", Issuer == "AD AUTHORITY"] && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", Issuer == "AD AUTHORITY"] && c3:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/title", Issuer == "AD AUTHORITY"] => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname", Value = c1.Value + " " + c2.Value + (c3.Value == "" ? "" : ", " + c3.Value), Issuer = c1.Issuer, OriginalIssuer = c1.OriginalIssuer, ValueType = c1.ValueType);
- 生效验证
所有规则保存后,走一遍第三方应用的登录流程,抓包查看ADFS返回的令牌内容,确认displayname声明的值符合「名 姓, 职务」的格式即可。如果值异常,先排查对应用户的AD属性是否填写正确,再核对规则里的声明类型和实际配置是否匹配。
注意:新增规则不要修改原有已经正常运行的4条属性传递规则,避免影响第三方应用原有能正常获取的属性字段。
内容的提问来源于stack exchange,提问作者Shen TraX
相关产品推荐
相关产品推荐

