Keycloak 26.7 新特性深度解读:SCIM 自动配置与 IAM 安全增强 | IDaaS Book
场景描述
Keycloak 26.7.0 于 2026 年 7 月 9 日发布,是 26.x 系列中功能密度最高的版本之一。四个核心方向值得关注:SCIM API 让用户自动配置成为可能、多集群 HA 不再依赖外部缓存、AuthZEN 和 OpenID SSF 让授权和安全事件标准化、SAML Step-up 从预览转正。如果你正在维护 Keycloak 生产集群,或者评估开源 IAM 方案,这些变化直接影响你的架构决策。
适用场景
- 需要自动从 HR 系统同步用户到 Keycloak 的场景(SCIM API)
- 跨机房/跨区域部署 Keycloak 集群,不想额外维护 Infinispan 或 Redis 的场景
- 需要标准化的授权决策接口(替代 Keycloak 专有 Authorization API)的场景
- 需要实时通知下游应用「用户被禁用/登出/改密码」的场景
- 有 SAML 应用需要 Step-up 认证的场景
不适用场景
- 仍在用 Keycloak 25.x 或更早版本的环境——先确认升级路径,不要直接跳版本
- SCIM API 目前是 Preview,生产环境需评估风险后可控开启
- 多集群免外部缓存也是 Preview,对缓存一致性要求极高的场景建议等待 GA
26.7.0 新特性总览
| 特性 | 状态 | IAM 影响 |
|---|---|---|
| SCIM API 用户/组管理 | Preview | 用户自动配置——打通 HR → IDP → 应用的全链路 |
| 多集群 HA(免外部缓存) | Preview | 简化架构,降低运维依赖 |
| AuthZEN Authorization API | Experimental | 标准化授权接口,解耦 PEP/PDP |
| OpenID SSF 实时安全信号 | Experimental | 用户状态变更实时推送给下游(不再等 Token 过期) |
| Identity Brokering API V2 | Supported(V1 废弃) | 更安全的外部 Token 获取机制 |
| SAML Step-up 认证 | Supported(从 Preview 转正) | SAML 应用终于可以要求更高认证级别 |
| Token Exchange Delegation | Experimental | 服务间委托授权更安全 |
| MCP Authorization 增强 | Supported | AI 工具接入 Keycloak 的标准化方式 |
| OID4VCI 可验证凭证 | Experimental(持续改进) | 去中心化身份方向的重要进展 |
| 反向代理蓝图(HAProxy/Traefik) | Supported | 降低反向代理配置门槛 |
SCIM API:自动用户配置(Preview)
SCIM(System for Cross-domain Identity Management,RFC 7644)是 IAM 领域最关键的自动化标准之一。有了 SCIM API,Keycloak 可以作为 SCIM Service Provider,接受来自身份治理平台、HR 系统、其他 IDP 的用户/组 CRUD 操作。
SCIM 解决的 IAM 痛点
没有 SCIM 时,用户入职/离职的典型流程是:
- HR 系统录入了新员工 → IT 管理员手动在 Keycloak 创建用户
- 员工离职了 → 管理员要在 Keycloak 和其他所有应用中手动禁用账号
- 部门调动 → 手动改用户属性和组
有了 SCIM API:
- HR 系统(如 Workday、飞书 People)通过 SCIM 调用 Keycloak 创建/更新/删除用户
- Keycloak 通过内置的 Identity Provider mappers 和 User Federation 将变更同步到下游应用
- 全程无需人工介入
启用方式
# 在 Keycloak 启动时启用 scim-api 预览特性
--features=preview # 或在 features.enabled 中添加 scim-api# Operator CR 中的配置
spec:
features:
enabled:
- scim-apiSCIM API 端点概览
| 操作 | 端点 | 说明 |
|---|---|---|
| 创建用户 | POST /admin/realms/{realm}/scim/v2/Users | 支持 Enterprise User 扩展 |
| 查询用户 | GET /admin/realms/{realm}/scim/v2/Users?filter=userName eq "alice" | 支持过滤和分页 |
| 更新用户 | PUT /admin/realms/{realm}/scim/v2/Users/{id} | 全量替换 |
| 部分更新 | PATCH /admin/realms/{realm}/scim/v2/Users/{id} | RFC 7644 Patch 语义 |
| 删除用户 | DELETE /admin/realms/{realm}/scim/v2/Users/{id} | 物理删除 |
| 组管理 | /admin/realms/{realm}/scim/v2/Groups | 创建、查询、更新、删除 |
| Schema 发现 | GET /admin/realms/{realm}/scim/v2/Schemas | 客户端发现支持的属性 |
| ServiceProviderConfig | GET /admin/realms/{realm}/scim/v2/ServiceProviderConfig | 能力声明 |
与现有 SCIM 章节的关系
本书第 7 章已详细阐述 SCIM 协议原理,24.2 节覆盖了 IAM 合规与等保 2.0 中对用户生命周期管理的要求。Keycloak 26.7 的 SCIM API 让这些理论有了开箱即用的实现——你可以直接在 Keycloak 上运行 SCIM 客户端(如 scim2-client、Azure AD SCIM 配置等)。
生产建议:SCIM API 是 Preview 功能,建议先在 staging 环境启用并验证与上游系统(HR、IGA)的兼容性。关注 Keycloak 后续版本的 GA 公告。
多集群 HA 免外部缓存(Preview)
Keycloak 在多数据中心/多集群部署时,传统方案需要外部 Infinispan 集群来做跨站点缓存同步。26.7.0 引入了简化的多集群 HA 模式,去掉了对外部缓存集群的依赖。
架构变化
26.6.x 及之前: 26.7.0 新方案(Preview):
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Site A │ │ Site B │ │ Site A │ │ Site B │
│ Keycloak│ │ Keycloak│ │ Keycloak│ │ Keycloak│
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
└───┬────────┘ └────────────┘
│ │
┌──────┴──────┐ 直接通信(无外部缓存层)
│ Infinispan │
│ (外部集群) │
└─────────────┘这意味着运维复杂度大幅降低——不再需要维护一个单独的高可用 Infinispan 集群及对应的监控和备份。该特性目前是 Preview,建议先非关键环境验证。
AuthZEN Authorization API(Experimental)
AuthZEN(OpenID AuthZEN Authorization API 1.0)是标准化的授权决策协议,定义了 PEP(策略执行点)和 PDP(策略决策点)之间的通用接口。Keycloak 26.7.0 实现了 PDP 角色——应用发送「subject + resource + action」的评估请求,Keycloak 返回 permit/deny 决策。
为什么这很重要
之前,要用 Keycloak 做细粒度授权,调用方必须依赖 Keycloak 的专有 Authorization API(/auth/realms/{realm}/authz/protection/...)。这意味着:
- 应用耦合了 Keycloak 的 API 模型
- 迁移到其他 PDP(如 OPA)需要改代码
- 无法在一个标准接口下做 PDP 灰度切换
AuthZEN 解决了这个问题——应用只需要知道 POST /authzen/v1/evaluation,返回 {"decision": "Permit"} 或 {"decision": "Deny"}。这让 Keycloak 可以和 OPA、Cedar 等其他 PDP 在同一个标准接口下互操作。
AuthZEN 与 IAM RBAC、ABAC、ReBAC 授权模型对比 的内容互补——前者定义了 PDP 的接口标准,后者帮你选授权模型。
OpenID SSF 实时安全信号(Experimental)
传统 OAuth/OIDC 模型下,用户被禁用或登出后,下游应用要等到 Token 过期(可能长达数小时)才能感知。OpenID Shared Signals Framework (SSF) 让 Keycloak 可以主动推送安全事件给注册的接收者。
支持的信号类型
| 事件类型 | 触发时机 | 下游动作 |
|---|---|---|
| Session Revoked | 用户主动登出、管理员踢出会话 | 立即清除该用户的本地会话 |
| Credential Change | 用户改了密码 | 要求重新认证 |
| Account Disabled | 管理员禁用账号 | 立即阻止访问 |
| Account Purged | 用户被删除 | 清理所有关联令牌和会话 |
启用方式
--features=ssfSSF 与 IAM 会话管理与 Token 生命周期 密切关联——SSF 解决了「Token 还没过期但身份已失效」的问题,让会话管理从事后轮询变成即时推送。
SAML Step-up 认证(Supported)
Step-up 认证允许:「正常访问用密码就够了,但执行敏感操作(如转账、删除用户)时要额外验证」。之前这个能力只对 OIDC 客户端可用,26.7.0 把 SAML Step-up 从 Preview 提升为 Supported。
SAML SP 在 AuthnRequest 中指定 RequestedAuthnContext,Keycloak 根据配置的认证流级别判断是否需要 Step-up。对于还有大量 SAML 应用的企业(金融、政务、教育行业常见),这是一个重要的安全增强。
Identity Brokering API V2(Supported,V1 废弃)
身份联邦场景中,后端服务有时需要获取用户在外部 IDP 的 Token。V1 API 通过给用户分配 broker role 来控制——这不够精细且不标准。V2 改进:
- 按 Client 授权:不是给用户赋权,而是在 Client 设置中控制
- 仅限 Confidential Client:拒绝 Public Client
- OAuth 2.0 兼容:标准
POST+ JSON 响应
如果你在 V1 上有依赖,V1 仍可用但已标记废弃,建议开始迁移到 V2。
验证
# 确认版本
curl -s https://auth.example.com/ | grep -o 'Keycloak [0-9.]*'
# 确认 SCIM API 端点可访问(需先启用)
curl -s -H "Authorization: Bearer $TOKEN" \
https://auth.example.com/admin/realms/test/scim/v2/ServiceProviderConfig | jq .
# 确认 AuthZEN 端点
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
https://auth.example.com/realms/test/authzen/v1/evaluation \
-d '{"subject":{"type":"user","id":"alice"},"resource":{"type":"document","id":"doc-1"},"action":{"name":"read"}}' | jq .
# 确认 SSF 配置(Admin Console → Realm Settings → Shared Signals)常见问题(IAM FAQ)
Q1:Keycloak SCIM API 和 Okta SCIM 有什么不同?
Okta SCIM 同时支持作为 Service Provider 和 Client,Keycloak 26.7 的 SCIM 目前实现的是 Service Provider 角色(接受外部系统的用户/组操作)。如果你需要 Keycloak 作为 SCIM Client 去从其他系统拉取用户,目前还是用 User Federation(LDAP/Kerberos)或 Identity Brokering 更合适。
Q2:免外部缓存的多集群 HA 和传统的 Infinispan 方案怎么选?
传统外部 Infinispan 方案更成熟(GA),适用于对缓存一致性要求极严的场景。新方案去掉了外部依赖,运维简单,但目前是 Preview。建议:新项目可以先用新方案在 staging 验证,生产环境等 GA 后再切换。
Q3:AuthZEN 会取代 Keycloak 现有的 Authorization Services 吗?
短期内不会。AuthZEN 是一种标准化接口,Keycloak 现有的 Authorization Services(resource-based policies, JavaScript/Rego policies, permission tickets)是授权引擎。AuthZEN 让你可以用标准方式调用这个引擎,不改变其内部策略模型。
Q4:升级到 26.7.0 有什么注意事项?
参考 Keycloak 升级指南,重点关注:
- Identity Brokering API V1 → V2 的迁移窗口
- 数据库迁移(Liquibase)会自动执行,升级前做好数据库备份
- 如果用了自定义 SPI,确认与 26.7.0 的 API 兼容性
回滚方式
# 回滚 Keycloak 版本
kubectl -n keycloak set image deploy/keycloak-operator \
keycloak-operator=quay.io/keycloak/keycloak-operator:26.6.4
# 如果用了 Operator CR,更新 image 字段
kubectl -n keycloak patch keycloak production-keycloak \
--type=merge -p '{"spec":{"image":"quay.io/keycloak/keycloak:26.6.4"}}'
# 回滚数据库(如果 Liquibase 已执行了迁移)
pg_restore -h postgres-host -U keycloak -d keycloak /backup/keycloak-pre-upgrade.sql