【身份与访问控制工程】Keycloak 工程拆解:Realm、Client、Flow 与扩展机制

💡 原文中文,约26400字,阅读约需63分钟。
📝

内容提要

Keycloak 是一个开源的身份和访问管理解决方案,支持 OIDC、OAuth2 和 SAML 等企业级功能。尽管架构复杂,特别是在 Quarkus 时代,Keycloak 仍适合用于企业内部单点登录和产品附带的身份管理。文章分析了 Keycloak 的架构、配置、缓存机制及与 LDAP 的集成,强调了生产环境中的注意事项和常见问题。掌握 Keycloak 的工程复杂性对团队至关重要,以确保系统的稳定性和性能。

🎯

关键要点

  • Keycloak 是一个开源的身份和访问管理解决方案,提供企业级 IAM 功能集,包括 OIDC、OAuth2 和 SAML。
  • Keycloak 的架构经历了从 WildFly 到 Quarkus 的转变,显著提高了启动速度和降低了内存占用。
  • Keycloak 的配置系统在 Quarkus 时代被重写,使用新的环境变量和命令行参数,旧的配置方式不再适用。
  • Keycloak 的进程内组件分层包括 HTTP 层、认证流程引擎、SPI 注册、模型层和存储层,SPI 层是主要的扩展点。
  • Keycloak 使用 Infinispan 作为分布式缓存,管理用户会话和其他缓存数据,必须注意 sticky session 的配置。
  • Keycloak 的数据库 schema 由 JPA 和 Liquibase 管理,推荐使用 PostgreSQL,需关注关键表的设计。
  • Keycloak 内置 master realm 用于管理其他 realm,建议每个租户或产品使用独立的 realm。
  • Keycloak 支持与 LDAP 和 Active Directory 的集成,需合理配置连接超时和读取超时。
  • Keycloak 的 Client Scope 机制允许将一组协议映射和角色打包成可复用单元,简化配置。
  • Keycloak 的认证流程引擎支持自定义 authenticator 和 protocol mapper,适应不同的业务需求。
  • 在高可用和多站点部署中,Keycloak 使用 JGroups 进行集群发现,跨 DC 部署需引入 Infinispan Server。
  • Keycloak 的工程复杂性体现在 Quarkus 运行时、Infinispan 缓存拓扑和认证流程引擎的扩展模型上。
  • Keycloak 适合企业内部 SSO 和产品附带的身份管理,但不适合高流量的 CIAM 场景。

延伸问答

Keycloak 的主要功能是什么?

Keycloak 是一个开源的身份和访问管理解决方案,支持 OIDC、OAuth2 和 SAML 等企业级功能。

Keycloak 从 WildFly 迁移到 Quarkus 有哪些优势?

迁移到 Quarkus 后,Keycloak 的启动时间从 20-30 秒缩短到 2-3 秒,内存占用减少到 250-400 MB。

如何配置 Keycloak 与 LDAP 的集成?

Keycloak 支持与 LDAP 和 Active Directory 的集成,需合理配置连接超时和读取超时。

Keycloak 的 Client Scope 机制有什么用?

Client Scope 机制允许将一组协议映射和角色打包成可复用单元,简化配置。

在高可用部署中,Keycloak 如何处理集群发现?

Keycloak 使用 JGroups 进行集群发现,支持多种发现协议,如 MPING、TCPPING 和 KUBE_PING。

Keycloak 适合哪些场景使用?

Keycloak 适合企业内部单点登录和产品附带的身份管理,但不适合高流量的 CIAM 场景。

➡️

继续阅读