You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于现有ADFS 3.0服务器场生成含用户AD组的JWT令牌?

在ADFS 3.0(Windows Server 2012 R2)中生成包含用户所有AD组的JWT令牌步骤

我刚好有过在ADFS 3.0环境下配置这类需求的实战经验,下面是一步步的操作指南,适配你的Windows Server 2012 R2环境:

1. 确认ADFS服务器场的基础状态

  • 先确保你的ADFS 3.0服务器场运行正常,既然已经启用了第三方应用认证,说明AD与ADFS的连接、证书等基础依赖都是没问题的。
  • 可以先检查ADFS是否能正常读取用户AD组:打开ADFS Management,导航到Trust Relationships -> Claims Provider Trusts,找到Active Directory信任,右键选择Edit Claim Rules,确认默认规则能读取用户属性和组信息。

2. 创建自定义声明规则(核心步骤:让ADFS把所有AD组放进令牌)

默认ADFS不会自动将用户所有AD组注入JWT,需要手动添加声明规则:

  1. 打开ADFS Management,找到Relying Party Trusts:如果你的内部自定义应用还没创建,先右键Add Relying Party Trust完成基础配置;如果已有,直接选中目标应用。
  2. 右键应用选择Edit Claim Rules,切换到Issuance Transform Rules标签页,点击Add Rule
  3. 选择Send LDAP Attributes as Claims模板,点击Next
  4. 给规则命名(比如Send All AD Groups to JWT),在Attribute store下拉选择Active Directory
  5. LDAP Attribute列选择Token-Groups - Unqualified Names(返回用户所属所有AD组的名称),然后在Outgoing Claim Type列输入Group(或者用标准的http://schemas.xmlsoap.org/claims/Group)。

    小贴士:如果需要组的SID而非名称,可选择Token-Groups - Qualified Names,对应调整输出声明类型即可。

  6. 点击Finish保存规则。
  7. 处理大令牌限制:如果用户所属AD组较多,JWT可能超出默认大小限制,打开PowerShell执行以下命令调整:
    Set-ADFSProperties -MaximumReceivedMessageSize 10485760
    Set-ADFSProperties -MaximumIssuedTokenSize 10485760
    
    这里设置为10MB,可根据实际组数量调整。

3. 基于OAuth/SAML协议配置应用

选项A:使用OAuth 2.0(适合REST类自定义应用)

  1. 右键目标应用选择Properties,切换到Advanced标签页,确保Secure hash algorithm选择SHA-256(ADFS 3.0支持,安全性更高)。
  2. 切换到Endpoints标签页,点击Add,选择TypeOAuthBindingPOSTTrusted URL填写应用的回调地址(比如https://your-internal-app.com/oauth/callback),点击OK
  3. 打开PowerShell配置OAuth客户端信息:
    Add-ADFSClient -ClientId "your-app-unique-client-id" -Name "Your Internal Custom App" -RedirectUri "https://your-internal-app.com/oauth/callback"
    Set-ADFSRelyingPartyTrust -TargetName "Your Internal Custom App" -IssueOAuthRefreshTokensTo AllDevices
    
    替换占位符为你的应用实际信息。

选项B:使用SAML 2.0(适合传统Web应用)

  1. 右键目标应用选择Properties,切换到Identifiers标签页,添加应用的实体ID(比如https://your-internal-app.com/saml/metadata)。
  2. 切换到Endpoints标签页,添加SAML Assertion Consumer Endpoint,绑定选POST,URL填写应用的SAML回调地址。
  3. 确认之前创建的组声明规则已生效:ADFS会把组信息放进SAML断言,若应用需要JWT,可通过应用侧的SAML-to-JWT转换工具实现,或者优先选择OAuth方案更直接。

4. 测试验证JWT内容

  1. 使用测试用户登录自定义应用,获取JWT令牌。
  2. 用本地JWT解析工具(避免敏感数据外传)解析令牌,查看payload部分是否包含所有AD组信息,对应声明键为你之前设置的Group或自定义名称。
  3. 若组信息未出现,排查方向:
    • 检查声明规则是否选择了正确的LDAP属性,是否启用。
    • 确认测试用户确实属于目标AD组,可重启ADFS服务同步信息:Restart-Service ADFS
    • 检查依赖方信任的规则配置是否正确。

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

火山引擎 最新活动