【身份与访问控制工程】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 场景。
➡️