IAM 签名密钥轮换排错:Keycloak 的 kid、JWKS 缓存与切换顺序
轮换后 401 大概率不是「Keycloak 没生效」,而是三段时间没对齐:新 kid 进入验签方缓存的时间、旧 kid 仍在签发令牌的时间、旧公钥被下线的时间。按组件给出可核对的默认值与切换顺序。
2026年9月28日 Keycloak5 minutes
轮换后 401 大概率不是「Keycloak 没生效」,而是三段时间没对齐:新 kid 进入验签方缓存的时间、旧 kid 仍在签发令牌的时间、旧公钥被下线的时间。按组件给出可核对的默认值与切换顺序。
2026年9月28日 Keycloak5 minutes
HTTP 访问 Keycloak 直接报 `HTTPS required`,或者回跳时报 `Invalid parameter: redirect_uri`——多数不是证书问题,而是 Realm 的 Require SSL 与反向代理头没对齐。给出 KC_PROXY_HEADERS / KC_HOSTNAME 最小配置、kcadm 改法,以及为什么不建议直接改库。
2024年4月1日 Keycloak1 minutes
Keycloak 接 MySQL Group Replication 时数据库迁移起不来,两个高频断点:Liquibase 自建的 DATABASECHANGELOG 没有主键被 GR 拒绝;节点切换的只读窗口让迁移锁写不进去。给出预建表 SQL、重试参数与 GR 超时配置。
在 Kubernetes 上把 Realm 完整导出备份、再迁移到新集群:`kc.sh export/import` 的正确用法(含 master Realm 不参与导出的坑)、`Script upload is disabled` 报错的处理,以及为什么控制台导出不能当作备份。
2024年4月1日 Keycloak, Kubernetes1 minutes