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

如何将Azure AD的Claims添加到Keycloak的KEYCLOAK_IDENTITY令牌中?

问题解决步骤

1. 校验身份提供商声明映射配置

进入Keycloak控制台对应Realm → 身份提供商 → 选择Azure AD → 声明映射:

  • 针对groups:添加映射,声明来源填groups,目标选择「用户属性」(属性名设为groups),或直接映射到Keycloak Realm/客户端角色(需确保Keycloak中存在对应角色,或开启「创建如果不存在」)。
  • 针对roles:同理,将Azure的roles声明映射到Keycloak角色或用户属性。

2. 配置客户端/Realm范围的声明输出

  • 进入Realm → 客户端范围 → 选择默认roles范围(或自定义范围):
    • 在「声明」标签页,添加自定义声明:
      • 名称groups,来源选「用户属性」,属性名称填groups;
      • 名称roles,来源选「角色列表」,按需选择「Realm角色」或「客户端角色」。
    • 确保你的业务客户端已关联该客户端范围。

3. 明确KEYCLOAK_IDENTITY的用途

KEYCLOAK_IDENTITY是Keycloak内部会话管理Cookie,默认不会包含所有用户声明。若需获取groups和roles,应通过以下方式:

  • 调用Keycloak的/realms/{realm}/protocol/openid-connect/userinfo端点,查看返回的用户信息;
  • 获取Keycloak颁发的Access Token或ID Token,这些令牌才会包含配置好的自定义声明。

4. 使用脚本映射器强制同步声明

若常规映射无效,添加脚本映射器:

  • 进入身份提供商 → Azure AD → 映射器 → 添加映射器 → 选择「脚本映射器」;
  • 填入以下脚本:
    // 同步Azure groups到用户属性
    var azureGroups = user.getAttribute('groups');
    if (azureGroups) {
        user.setSingleAttribute('groups', azureGroups);
    }
    
    // 同步Azure roles到Realm角色
    var azureRoles = user.getAttribute('roles');
    if (azureRoles) {
        var realm = session.getContext().getRealm();
        azureRoles.forEach(function(roleName) {
            var targetRole = realm.getRole(roleName);
            if (targetRole) {
                user.grantRole(targetRole);
            }
        });
    }
    
  • 保存后重新登录测试。

5. 验证Azure AD应用配置

进入Azure Portal → Azure AD → 企业应用 → 你的应用 → 单一登录 → 用户属性和声明:

  • 确认groups和roles声明已正确添加,且配置了正确的返回格式(如组ID、角色名称)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:11