场景描述

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 APIExperimental标准化授权接口,解耦 PEP/PDP
OpenID SSF 实时安全信号Experimental用户状态变更实时推送给下游(不再等 Token 过期)
Identity Brokering API V2Supported(V1 废弃)更安全的外部 Token 获取机制
SAML Step-up 认证Supported(从 Preview 转正)SAML 应用终于可以要求更高认证级别
Token Exchange DelegationExperimental服务间委托授权更安全
MCP Authorization 增强SupportedAI 工具接入 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 时,用户入职/离职的典型流程是:

  1. HR 系统录入了新员工 → IT 管理员手动在 Keycloak 创建用户
  2. 员工离职了 → 管理员要在 Keycloak 和其他所有应用中手动禁用账号
  3. 部门调动 → 手动改用户属性和组

有了 SCIM API:

  1. HR 系统(如 Workday、飞书 People)通过 SCIM 调用 Keycloak 创建/更新/删除用户
  2. Keycloak 通过内置的 Identity Provider mappers 和 User Federation 将变更同步到下游应用
  3. 全程无需人工介入

启用方式

# 在 Keycloak 启动时启用 scim-api 预览特性
--features=preview  # 或在 features.enabled 中添加 scim-api
# Operator CR 中的配置
spec:
  features:
    enabled:
      - scim-api

SCIM 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客户端发现支持的属性
ServiceProviderConfigGET /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=ssf

SSF 与 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

延伸阅读