You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADFS第三方声明提供方信任场景下阻止本地AD禁用/过期账号访问应用问询

ADFS拦截本地禁用/过期联合账号访问的配置方案

核心逻辑

在现有Azure AD身份验证完成后、ADFS向依赖方颁发令牌前,增加本地AD账号状态校验环节,无需修改合作方Azure AD配置,所有调整均在你方ADFS侧完成。

前置检查

确认ADFS服务账号对本地Active Directory有只读权限,且本地AD已被配置为ADFS的默认属性存储(该配置为ADFS默认项,无特殊改动无需调整)。

配置步骤

步骤1:修改合作方Azure AD对应的声明提供方信任(Claim Provider Trust)的颁发转换规则

新增两条自定义声明规则:

  • 第一条规则:通过联合身份匹配字段查询本地AD的账号状态属性
    规则类型选择「使用自定义规则发送声明」,规则语法如下(请将匹配字段、自定义声明类型替换为你方实际使用的配置):
    // 示例中用UPN作为两边用户的匹配字段,可替换为mail、immutableID等你方实际用的联合匹配属性
    c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"]
    => add(
      store = "Active Directory",
      types = ("http://yourdomain.com/claims/accountenabled", "http://yourdomain.com/claims/accountexpires"),
      query = ";userAccountControl,accountExpires;{0}",
      param = c.Value
    );
    
  • 第二条规则:命中禁用/过期条件时直接返回拒绝声明
    同样选择自定义规则类型,语法如下:
    // userAccountControl值匹配代表账号禁用,accountExpires小于当前时间对应的文件时间值代表账号过期
    exists([Type == "http://yourdomain.com/claims/accountenabled", Value =~ "^(?i)514|546|66050|66082$"])
    || exists([Type == "http://yourdomain.com/claims/accountexpires", Value < "133486656000000000"])
    => issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "DenyInvalidLocalAccount");
    

    注:userAccountControl的禁用取值可根据你方AD实际场景补充,accountExpires的时间阈值请替换为你当前时间对应的AD文件时间值,0或9223372036854775807代表账号永不过期。

步骤2:验证依赖方信任的授权规则

默认ADFS的全局授权规则会自动识别http://schemas.microsoft.com/authorization/claims/deny类型的声明,只要存在该声明就会直接返回403拦截用户访问。如果你方的依赖方信任配置了自定义授权规则,只需确保规则中未屏蔽该拒绝声明的校验即可。

生效验证

分别使用本地禁用、本地过期、本地正常的测试账号走联合登录流程,确认前两类账号被拦截,正常账号可正常访问应用即可。

内容的提问来源于stack exchange,提问作者the-burgh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:03