ADFS 4.0域本地组声明无法传递问题求助
ADFS 4.0域本地组身份声明规则失效问题解决
问题背景
原本用全局安全组配置ADFS组成员身份声明规则运行正常,为添加外部林信任用户把全局组转成域本地组后,规则直接失效——哪怕是同域用户,只有全局组能正常触发规则,域本地组完全不行。
核心结论
ADFS 4.0不支持直接用域本地组做组成员身份声明规则的目标组。原因是域本地组的作用域仅限本域,ADFS的身份声明引擎没法跨域解析它的成员关系,就算是同域用户,组的作用域属性也会导致解析逻辑失败。
解决方案
方案1:嵌套组兼容(推荐)
保留原来的全局组作为ADFS声明规则的目标组,通过嵌套域本地组来添加外部林用户:
- 新建一个域本地组,把外部林信任用户加进去
- 把这个域本地组嵌套到原有的全局安全组里
- 保持ADFS声明规则指向原全局组,这样既能支持外部用户,又不破坏原有规则的运行逻辑
方案2:自定义PowerShell声明规则
如果一定要用域本地组,可以写自定义脚本实现成员身份验证:
- 编写PowerShell脚本查询域本地组的成员(要确保ADFS服务账户有读取域本地组的权限)
- 在ADFS里创建自定义声明规则,调用这个脚本返回成员身份声明
- 示例规则代码:
注:这个脚本会返回用户所属的所有组SID,后续可以过滤出域本地组的SID来生成对应声明c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"), query = ";tokenGroups;{0}", param = c.Value);
注意事项
- 要给ADFS服务账户配置读取域本地组成员的权限,默认权限可能不够,得手动设置
- 嵌套组方案是官方推荐的稳定方式,自定义脚本要考虑性能和后续维护成本
内容的提问来源于stack exchange,提问作者KAI YAO
相关产品推荐
相关产品推荐

