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

能否让ADFS在用户名密码认证阶段同时校验用户角色?

实现ADFS认证时的角色校验(针对OpenIdConnect场景)

好问题!你提到的需求完全可以在ADFS里实现——虽然严格来说角色校验属于授权范畴,但ADFS的灵活规则机制允许我们把这一步整合到认证流程中,完美匹配你区分站点A、B的场景。结合你用OpenIdConnect、用户信息存在LDAP的情况,具体实现步骤如下:

第一步:让ADFS从LDAP获取用户角色声明

首先得确保ADFS能从你的LDAP(比如Active Directory)中提取用户的角色/组信息,转化为认证令牌里的声明。操作步骤:

  • 打开ADFS管理控制台,找到Claims Provider Trusts,右键默认的Active Directory信任,选择Edit Claim Rules。
  • 点击Add Rule,选择Send LDAP Attributes as Claims模板,点击下一步。
  • 设置规则名称(比如“Extract User Roles”),选择LDAP属性存储为你的Active Directory。
  • 在LDAP属性列选择Token-Groups - Unqualified Names(或者Member Of,取决于你想用组名还是组DN),然后在传出声明类型列选择Role(或者标准声明类型http://schemas.microsoft.com/ws/2008/06/identity/claims/role)。
  • 完成规则创建,这样ADFS在认证时就会把用户所属的组作为role声明加入令牌。

第二步:为不同站点配置差异化的授权规则

ADFS的Relying Party Trusts(对应你的站点A和B)支持独立配置授权规则,这就是实现你场景的核心:

针对站点A(仅Admin角色可登录)

  • 在ADFS管理控制台的Relying Party Trusts中,找到站点A的信任条目,右键选择Edit Claim Rules。
  • 切换到Issuance Authorization Rules标签页,点击Add Rule。
  • 选择Permit or Deny Users Based on an Incoming Claim模板,点击下一步。
  • 规则名称设为“Permit Only Admin Role”,然后选择Permit access only if the incoming claim matches a specific value。
  • 传入声明类型选择Role,声明值填写你的Admin组名称(比如AdminGroup,要和第一步提取的组名一致)。
  • 完成规则创建。现在当用户尝试登录站点A时,ADFS会先检查用户的role声明是否包含指定的Admin组,不满足的话直接拒绝认证请求,用户无法进入登录后的流程。

针对站点B(任意用户可登录)

  • 同样进入站点B的Issuance Authorization Rules标签页。
  • 添加一个规则,选择Permit All Users模板(或者直接保留默认的允许所有已认证用户的规则)。
  • 这样只要用户通过了用户名密码的LDAP校验,ADFS就会发行令牌,允许用户登录站点B。

关键说明

  • 这种方式相当于把授权逻辑前置到ADFS的认证环节,不符合角色要求的用户连认证都无法通过,完全符合你描述的场景。
  • 如果你后续需要调整角色权限,只需要在ADFS里修改对应Relying Party的授权规则即可,不需要改动应用代码。
  • 测试时可以用ADFS的Claims X-Ray工具(或者在应用里打印令牌内容),确认role声明是否正确提取,以及授权规则是否生效。

内容的提问来源于stack exchange,提问作者Saurabh Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:48:28