<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第四部分：实现与实践 on IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/</link><description>Recent content in 第四部分：实现与实践 on IDaaS Book</description><generator>Hugo</generator><language>zh-CN</language><copyright>Copyright (c) 2020-2024 xlabs.club</copyright><atom:link href="https://idaas.xlabs.club/docs/implementation/index.xml" rel="self" type="application/rss+xml"/><item><title>Keycloak IAM 架构深度解析 — 核心组件、部署架构与扩展机制 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/keycloak-architecture/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/keycloak-architecture/</guid><description>&lt;h2 id="141-keycloak-的设计哲学"&gt;14.1 Keycloak 的设计哲学&lt;/h2&gt;
&lt;p&gt;Keycloak 是 Red Hat 主导开源的 IAM 解决方案。它的设计哲学可概括为：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;开箱即用&lt;/strong&gt;：快速部署，即可使用完整 SSO、社交登录、MFA&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标准优先&lt;/strong&gt;：完整实现 OAuth 2.0、OIDC、SAML 2.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可扩展&lt;/strong&gt;：SPI（Service Provider Interface）机制允许深度定制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云原生&lt;/strong&gt;：支持容器化、Kubernetes、Operator 部署&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="142-架构全景"&gt;14.2 架构全景&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│ Keycloak Server │
│ │
│ ┌───────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Admin Console │ │ Account │ │ Login/Register │ │
│ │ (管理控制台) │ │ Console │ │ Themes (登录页) │ │
│ │ Angular SPA │ │ (用户自助) │ │ FTL Templates │ │
│ └───────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
│ │ │ │ │
│ ┌───────┴─────────────────┴────────────────────┴─────────┐ │
│ │ REST API Layer │ │
│ │ (JAX-RS + Admin REST + Realms Admin) │ │
│ └──────────────────────────┬─────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┴──────────────────────────────┐ │
│ │ Service Layer │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ │
│ │ │Auth Flow │ │Identity │ │User │ │Client │ │ │
│ │ │Executor │ │Provider │ │Federation│ │Manager │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │ │
│ └───────────────────────────┬──────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┴──────────────────────────────┐ │
│ │ SPI Layer (扩展点) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────┐ ┌─────────┐ │ │
│ │ │User │ │Auth │ │Event │ │Theme │ │Required │ │ │
│ │ │Storage │ │Flow │ │Listener│ │ │ │Action │ │ │
│ │ └────────┘ └────────┘ └────────┘ └──────┘ └─────────┘ │ │
│ └───────────────────────────┬──────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┴──────────────────────────────┐ │
│ │ Infinispan (缓存层) │ │
│ │ ┌────────────┐ ┌────────────┐ ┌──────────────────┐ │ │
│ │ │User Cache │ │Realm Cache │ │Auth Session Cache│ │ │
│ │ └────────────┘ └────────────┘ └──────────────────┘ │ │
│ └───────────────────────────┬──────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┴──────────────────────────────┐ │
│ │ Persistence (持久层) │ │
│ │ JPA (Hibernate) → PostgreSQL / MySQL │ │
│ │ Liquibase (数据库迁移管理) │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="143-核心概念"&gt;14.3 核心概念&lt;/h2&gt;
&lt;h3 id="realm域"&gt;Realm（域）&lt;/h3&gt;
&lt;p&gt;Realm 是 Keycloak 中最核心的隔离单位。一个 Realm 管理一组用户、凭证、角色和组。不同 Realm 之间完全隔离。&lt;/p&gt;</description></item><item><title>第15章：Apereo CAS — 开源企业级 SSO 与 CAS 协议详解 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/cas-apereo/</link><pubDate>Tue, 02 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/cas-apereo/</guid><description>&lt;h2 id="151-cas-简介"&gt;15.1 CAS 简介&lt;/h2&gt;
&lt;p&gt;Apereo CAS（Central Authentication Service）是教育和技术社区最古老、最广泛使用的开源 SSO 解决方案之一。始于耶鲁大学（2002年），现由 Apereo 基金会维护。&lt;/p&gt;
&lt;p&gt;CAS 的定位是：&lt;strong&gt;专注于 Web SSO 的认证服务器&lt;/strong&gt;，提供了丰富的协议支持和现代的身份管理能力。&lt;/p&gt;
&lt;h2 id="152-cas-与-keycloak-的定位差异"&gt;15.2 CAS 与 Keycloak 的定位差异&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;CAS&lt;/th&gt;
					&lt;th&gt;Keycloak&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;起源&lt;/td&gt;
					&lt;td&gt;教育领域（耶鲁大学）&lt;/td&gt;
					&lt;td&gt;企业领域（Red Hat）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;设计哲学&lt;/td&gt;
					&lt;td&gt;高度可配置，Assembly Line&lt;/td&gt;
					&lt;td&gt;开箱即用，约定优于配置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;扩展方式&lt;/td&gt;
					&lt;td&gt;依赖注入，丰富的模块&lt;/td&gt;
					&lt;td&gt;SPI 机制&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;用户管理&lt;/td&gt;
					&lt;td&gt;委派给外部源&lt;/td&gt;
					&lt;td&gt;自有用户存储 + 联合&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;协议支持&lt;/td&gt;
					&lt;td&gt;CAS 协议、SAML 2.0、OIDC、OAuth 2.0、WS-Federation&lt;/td&gt;
					&lt;td&gt;OIDC、OAuth 2.0、SAML 2.0（不原生支持 WS-Fed）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;文档质量&lt;/td&gt;
					&lt;td&gt;一般&lt;/td&gt;
					&lt;td&gt;好&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;社区&lt;/td&gt;
					&lt;td&gt;教育+研究机构为主&lt;/td&gt;
					&lt;td&gt;更广泛的企业社区&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;容器化友好度&lt;/td&gt;
					&lt;td&gt;需要定制构建&lt;/td&gt;
					&lt;td&gt;原生支持&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;选型建议&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你的环境主要是 Java 生态，需要高度定制化 → CAS&lt;/li&gt;
&lt;li&gt;如果你需要快速部署，开箱即用 → Keycloak&lt;/li&gt;
&lt;li&gt;如果你在教育领域，已有 CAS 基础设施 → 继续用 CAS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="153-cas-架构"&gt;15.3 CAS 架构&lt;/h2&gt;
&lt;h3 id="核心设计assembly-line"&gt;核心设计：Assembly Line&lt;/h3&gt;
&lt;p&gt;CAS 使用&amp;quot;装配线&amp;quot;模式处理认证请求：&lt;/p&gt;</description></item><item><title>第16章：Dex 身份代理 — Kubernetes 原生 OIDC 联邦方案 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/dex-identity/</link><pubDate>Wed, 03 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/dex-identity/</guid><description>&lt;h2 id="161-dex-的设计定位"&gt;16.1 Dex 的设计定位&lt;/h2&gt;
&lt;p&gt;Dex 最初由 CoreOS 开发，现由 dexidp 社区维护（CNCF 生态相关），专门为 Kubernetes 生态设计。它的定位非常精准：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dex 不是一个完整的 IAM 系统，它是一个 OIDC 身份代理。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dex 不做的事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不存储用户（用户数据在外部 IdP）&lt;/li&gt;
&lt;li&gt;不提供用户管理 UI&lt;/li&gt;
&lt;li&gt;不提供授权管理（RBAC 由 Kubernetes 的 RBAC 处理）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dex 做的事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;连接各种上游 IdP（LDAP、AD、GitHub、Google、SAML 等）&lt;/li&gt;
&lt;li&gt;统一输出为 OIDC&lt;/li&gt;
&lt;li&gt;为 Kubernetes 提供 OIDC 认证&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="什么时候用-dex"&gt;什么时候用 Dex？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你的 Kubernetes 集群需要对接企业 AD/LDAP 进行认证&lt;/li&gt;
&lt;li&gt;你只需要一个轻量级的 OIDC 桥接&lt;/li&gt;
&lt;li&gt;你不想部署完整的 Keycloak&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="什么时候不用-dex"&gt;什么时候不用 Dex？&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你需要用户管理界面&lt;/li&gt;
&lt;li&gt;你需要丰富的授权策略&lt;/li&gt;
&lt;li&gt;你需要支持多种下游协议（如 SAML）&lt;/li&gt;
&lt;li&gt;你需要自定义认证流程&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="162-dex-架构"&gt;16.2 Dex 架构&lt;/h2&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt; ┌─────────────────────────┐
 │ Dex Server │
 │ │
 │ ┌───────────────────┐ │
 │ │ Connectors │ │
 │ │ ┌──────┐┌──────┐ │ │
 │ │ │ LDAP ││ OIDC │ │ │
 │ │ └──────┘└──────┘ │ │
 │ │ ┌──────┐┌──────┐ │ │
 │ │ │ SAML ││GitHub│ │ │
 │ │ └──────┘└──────┘ │ │
 │ │ ┌──────┐┌──────┐ │ │
 │ │ │Google││ AD │ │ │
 │ │ └──────┘└──────┘ │ │
 │ └───────────────────┘ │
 │ │
 │ 统一输出：OIDC Provider │
 └───────────┬─────────────┘
 │
 ┌───────────────┼───────────────┐
 ▼ ▼ ▼
 [Kubernetes] [Grafana] [Istio]&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="163-dex-配置"&gt;16.3 Dex 配置&lt;/h2&gt;
&lt;h3 id="基本配置结构"&gt;基本配置结构&lt;/h3&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# config.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;issuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://dex.example.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;inCluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;web&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0.0.0.0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;5556&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# TLS 配置在生产环境必须&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# OIDC 客户端配置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;staticClients&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redirectURIs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;http://localhost:8000&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Kubernetes&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;generated-client-secret&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 上游连接器&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;connectors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ldap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ldap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;LDAP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ldap.example.com:636&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;insecureNoSSL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bindDN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cn=admin,dc=example,dc=com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;bindPW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;admin-password&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;userSearch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;baseDN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ou=users,dc=example,dc=com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;(objectClass=inetOrgPerson)&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;uid&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;idAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;uid&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;emailAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mail&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nameAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;displayName&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;groupSearch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;baseDN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ou=groups,dc=example,dc=com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;(objectClass=groupOfNames)&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;userMatchers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;userAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;DN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;groupAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;member&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nameAttr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cn&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;github&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;github&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;GitHub&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clientID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;$GITHUB_CLIENT_ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;$GITHUB_CLIENT_SECRET&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;redirectURI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://dex.example.com/callback&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;orgs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-org&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;teams&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;platform-team&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;h3 id="连接器类型"&gt;连接器类型&lt;/h3&gt;
&lt;p&gt;Dex 支持的连接器：&lt;/p&gt;</description></item><item><title>第17章：IDaaS 方案全景对比 — Keycloak vs CAS vs Dex 选型决策框架 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/other-idaas-solutions/</link><pubDate>Thu, 04 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/other-idaas-solutions/</guid><description>&lt;h2 id="171-idaas-市场格局"&gt;17.1 IDaaS 市场格局&lt;/h2&gt;
&lt;p&gt;当前 IDaaS 市场可分为以下几个阵营：&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt; │ 云原生产品
 Okta │ Auth0 (Okta) 自建/私有化
 Entra ID │ Ping Identity Keycloak
 Google CI │ ForgeRock Janssen
 腾讯云IDaaS│ JumpCloud Casdoor
 │

 商业 SaaS ←──────────────→ 开源自建
 (快) (可控)&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;注：ForgeRock 已于 2023 年被 Ping Identity 收购，二者现同属一家；Microsoft 已将 Azure AD 更名为 Entra ID。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="172-开源方案对比"&gt;17.2 开源方案对比&lt;/h2&gt;
&lt;h3 id="keycloak"&gt;Keycloak&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;类型&lt;/strong&gt;：完整 IAM / IDaaS 平台
&lt;strong&gt;语言&lt;/strong&gt;：Java (Quarkus)
&lt;strong&gt;许可证&lt;/strong&gt;：Apache 2.0&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;功能最全面的开源 IAM&lt;/li&gt;
&lt;li&gt;Red Hat 背书，社区活跃、长期演进&lt;/li&gt;
&lt;li&gt;丰富的协议支持（OIDC、SAML 2.0、OAuth 2.0）&lt;/li&gt;
&lt;li&gt;活跃的社区和生态&lt;/li&gt;
&lt;li&gt;SPI 机制支持深度定制&lt;/li&gt;
&lt;li&gt;文档相对完善&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;不足&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>第18章：IDaaS 集成模式与实践 — 网关、BFF 与 Sidecar 架构模式 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/integration-patterns/</link><pubDate>Fri, 05 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/integration-patterns/</guid><description>&lt;h2 id="181-集成模式概览"&gt;18.1 集成模式概览&lt;/h2&gt;
&lt;p&gt;将 IDaaS 集成到应用架构中有多种模式，选择正确的模式取决于应用类型、安全要求和技术栈：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模式&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
					&lt;th&gt;复杂度&lt;/th&gt;
					&lt;th&gt;安全性&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;网关模式&lt;/td&gt;
					&lt;td&gt;传统 Web 应用、API&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;BFF 模式&lt;/td&gt;
					&lt;td&gt;SPA、移动端&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;高&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sidecar 模式&lt;/td&gt;
					&lt;td&gt;微服务/服务网格&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;高&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SDK/库模式&lt;/td&gt;
					&lt;td&gt;任何应用&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;取决于实现&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;直接集成&lt;/td&gt;
					&lt;td&gt;自定义应用&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;取决于实现&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="182-网关模式"&gt;18.2 网关模式&lt;/h2&gt;
&lt;h3 id="api-网关认证"&gt;API 网关认证&lt;/h3&gt;
&lt;p&gt;在 API 网关层统一处理认证，后端服务不感知身份：&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;客户端 → [API 网关] → [后端服务]
 │
 │ Token 验证
 ▼
 [IDaaS Server]&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后端服务零改动&lt;/li&gt;
&lt;li&gt;集中管理认证策略&lt;/li&gt;
&lt;li&gt;网关层统一的限流、日志、监控&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网关层成为性能瓶颈&lt;/li&gt;
&lt;li&gt;细粒度授权在网关层实现困难&lt;/li&gt;
&lt;li&gt;后端服务不知道&amp;quot;谁&amp;quot;在访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nginx--oauth2-代理"&gt;Nginx + OAuth2 代理&lt;/h3&gt;
&lt;p&gt;使用 &lt;code&gt;oauth2-proxy&lt;/code&gt; 为任何 HTTP 应用添加 OAuth 2.0 保护。完整配置指南、生产排错与回滚方案见 

&lt;a class="link link--text" href="https://idaas.xlabs.club/docs/solution-blogs/keycloak-oauth2-proxy/"&gt;Keycloak + oauth2-proxy 集成实战指南&lt;/a&gt;，本节给出快速参考。&lt;/p&gt;</description></item><item><title>第19章：Keycloak IAM Kubernetes 生产环境部署 — Helm、Operator 与高可用 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/kubernetes-production/</link><pubDate>Sat, 06 Apr 2024 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/kubernetes-production/</guid><description>&lt;h2 id="191-部署方式选择"&gt;19.1 部署方式选择&lt;/h2&gt;
&lt;p&gt;在 Kubernetes 上部署 IDaaS（以 Keycloak 为例），有三种主流方式：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方式&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
					&lt;th&gt;优点&lt;/th&gt;
					&lt;th&gt;缺点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Helm Chart&lt;/td&gt;
					&lt;td&gt;一般场景&lt;/td&gt;
					&lt;td&gt;简单、社区维护&lt;/td&gt;
					&lt;td&gt;定制受限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Keycloak Operator&lt;/td&gt;
					&lt;td&gt;生产环境&lt;/td&gt;
					&lt;td&gt;云原生、自动管理&lt;/td&gt;
					&lt;td&gt;学习曲线&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;手动 YAML&lt;/td&gt;
					&lt;td&gt;特殊需求&lt;/td&gt;
					&lt;td&gt;完全控制&lt;/td&gt;
					&lt;td&gt;运维负担大&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;推荐&lt;/strong&gt;：生产环境优先使用 Keycloak Operator（原生支持 Quarkus 发行版，建议跟随当前稳定版）。如果组织已经有成熟 Helm 交付体系，可以使用 Helm，但要把数据库、反向代理、健康检查、监控和升级回滚纳入同一套发布流程。&lt;/p&gt;
&lt;h3 id="生产部署快速决策表"&gt;生产部署快速决策表&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;问题&lt;/th&gt;
					&lt;th&gt;推荐做法&lt;/th&gt;
					&lt;th&gt;风险提示&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Operator 还是 Helm？&lt;/td&gt;
					&lt;td&gt;长期运行、需要自动化滚动升级和 CRD 管理时优先 Operator；短期 PoC 或已有 Helm 平台可选 Helm&lt;/td&gt;
					&lt;td&gt;不要同时用 Operator 和 Helm 管理同一个 Keycloak 实例，控制面会打架&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;数据库放哪里？&lt;/td&gt;
					&lt;td&gt;使用外部 PostgreSQL 或云数据库，独立备份与监控&lt;/td&gt;
					&lt;td&gt;Operator 不负责创建和维护生产数据库；把数据库塞进同一个无状态发布包，迟早会在恢复演练里交学费&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TLS 在哪里终结？&lt;/td&gt;
					&lt;td&gt;通常在 Ingress/LB 终结 TLS，Keycloak 仅解析可信代理头&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;proxy.headers: xforwarded&lt;/code&gt; 只应信任受控代理；不要把 management 端口暴露到公网&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;版本如何选择？&lt;/td&gt;
					&lt;td&gt;Keycloak 镜像、Operator 资源和 CRD 使用同一稳定版本，并先在预发环境演练升级&lt;/td&gt;
					&lt;td&gt;跳版本升级前先读 release notes 和迁移指南，准备数据库备份与回滚窗口&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="192-使用-keycloak-operator"&gt;19.2 使用 Keycloak Operator&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;版本提示：Keycloak 官方下载页与 GitHub Release 显示当前稳定版为 &lt;code&gt;26.7.0&lt;/code&gt;（2026-07-11 检查）；官方 Operator 安装文档同样提供 &lt;code&gt;26.7.0&lt;/code&gt; 的 &lt;code&gt;keycloak-k8s-resources&lt;/code&gt; 示例。Keycloak 迭代很快，部署时请到 

&lt;a class="link link--text" href="https://www.keycloak.org/downloads" rel="external"&gt;keycloak.org/downloads&lt;/a&gt;、

&lt;a class="link link--text" href="https://github.com/keycloak/keycloak/releases" rel="external"&gt;Keycloak Releases&lt;/a&gt; 与 

&lt;a class="link link--text" href="https://www.keycloak.org/operator/installation" rel="external"&gt;Operator 安装文档&lt;/a&gt; 复核&lt;strong&gt;当前最新稳定版&lt;/strong&gt;，并保持 Operator 版本与 Keycloak 镜像一致。&lt;/p&gt;</description></item><item><title>Casdoor 深度解读 — AI-First 开源 IAM 的架构、部署与选型指南 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/casdoor-deep-dive/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/casdoor-deep-dive/</guid><description>&lt;h2 id="casdoor-简介"&gt;Casdoor 简介&lt;/h2&gt;
&lt;p&gt;Casdoor 是 

&lt;a class="link link--text" href="https://casbin.org/" rel="external"&gt;Casbin&lt;/a&gt; 社区推出的开源身份与访问管理（IAM）平台，截至 2026 年 7 月最新稳定版为 &lt;strong&gt;v3.108.0&lt;/strong&gt;（Apache 2.0 许可证），GitHub 约 13,900 星。&lt;/p&gt;
&lt;p&gt;一句话定位：&lt;strong&gt;UI-first、支持多协议、内置 Casbin 授权的轻量级 IAM 服务器&lt;/strong&gt;。它在 2025-2026 年逐步引入 MCP Gateway 和 A2A 协议支持，转向 &amp;ldquo;AI-First&amp;rdquo; 路线——这意味着 Casdoor 不仅能做人应用的认证中心，也在尝试成为 AI Agent 之间的身份与授权网关。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;信息&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;项目&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://github.com/casdoor/casdoor" rel="external"&gt;github.com/casdoor/casdoor&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Go (后端) + React (前端)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;数据库&lt;/td&gt;
					&lt;td&gt;MySQL、PostgreSQL、SQLite（快速试用）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;缓存&lt;/td&gt;
					&lt;td&gt;可选 Redis&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;许可证&lt;/td&gt;
					&lt;td&gt;Apache 2.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;文档&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://casdoor.ai" rel="external"&gt;casdoor.ai&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;在线 Demo&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://door.casdoor.com" rel="external"&gt;door.casdoor.com&lt;/a&gt;（只读）/ 

&lt;a class="link link--text" href="https://demo.casdoor.com" rel="external"&gt;demo.casdoor.com&lt;/a&gt;（可写，约 5 分钟重置）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心架构"&gt;核心架构&lt;/h2&gt;
&lt;pre class="mermaid"&gt;
 graph TB
 subgraph &amp;#34;外部系统&amp;#34;
 User[用户/应用]
 AI[AI Agent]
 SP[第三方 IDP&amp;lt;br/&amp;gt;Google/GitHub/企业微信]
 end

 subgraph &amp;#34;Casdoor&amp;#34;
 UI[React Web UI]
 API[RESTful API Server&amp;lt;br/&amp;gt;Go + Beego]
 AuthN[认证引擎&amp;lt;br/&amp;gt;OAuth/OIDC/SAML/CAS/LDAP]
 AuthZ[授权引擎&amp;lt;br/&amp;gt;Casbin]
 Store[(数据存储&amp;lt;br/&amp;gt;MySQL/PostgreSQL)]
 MCP[MCP Gateway&amp;lt;br/&amp;gt;A2A Protocol]
 end

 subgraph &amp;#34;下游应用&amp;#34;
 App1[Web 应用]
 App2[移动 App]
 App3[AI Agent 工具]
 end

 User --&amp;gt; UI
 User --&amp;gt; API
 AI --&amp;gt; MCP
 MCP --&amp;gt; API
 SP --&amp;gt; AuthN
 API --&amp;gt; AuthN
 API --&amp;gt; AuthZ
 AuthN --&amp;gt; Store
 AuthZ --&amp;gt; Store
 AuthN --&amp;gt; App1
 AuthN --&amp;gt; App2
 AuthZ --&amp;gt; App3
&lt;/pre&gt;

&lt;p&gt;Casdoor 采用前后端分离架构：&lt;/p&gt;</description></item><item><title>Authentik — Python 生态的开源 IAM 平台详解 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/authentik-deep-dive/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/authentik-deep-dive/</guid><description>&lt;p&gt;Authentik 是一个用 Python/Django 编写的开源身份验证与授权平台，2020 年由 Jens Langhammer 创建，当前最新稳定版为 &lt;strong&gt;2026.5.3&lt;/strong&gt;（2026 年 6 月发布），GitHub 22k+ star。它的核心差异点在于：用**可视化流程构建器（Flow Builder）**替代硬编码的认证逻辑，用 &lt;strong&gt;Outpost 代理&lt;/strong&gt; 将认证能力延伸到任意网络边界，同时保持 Python 生态的灵活性和可编程性。&lt;/p&gt;
&lt;h2 id="核心设计思路"&gt;核心设计思路&lt;/h2&gt;
&lt;p&gt;Authentik 的设计围绕三个核心概念展开：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flow（流程）&lt;/strong&gt;：一切认证行为——登录、注册、MFA 验证、密码重置、用户设置——都是可拖拽编排的流程。你可以像搭积木一样组合&amp;quot;用户名密码验证 → TOTP 验证 → 用户信息确认&amp;quot;形成一条完整的登录流水线。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outpost（前哨）&lt;/strong&gt;：Authentik 核心不直接面向外部流量，而是通过 Go 编写的轻量 Outpost 代理（LDAP Outpost、Proxy Outpost、Radius Outpost）部署在目标网络内，作为认证网关。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy / Binding（策略与绑定）&lt;/strong&gt;：权限控制通过表达式策略实现，支持 Python 表达式、用户属性、IP 范围等条件，策略可绑定到 Flow、应用、属性映射等任何资源上。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="架构全景"&gt;架构全景&lt;/h2&gt;
&lt;pre class="mermaid"&gt;
 flowchart TB
 subgraph &amp;#34;用户侧&amp;#34;
 U[用户浏览器]
 APP[下游应用]
 end

 subgraph &amp;#34;Authentik 核心&amp;#34;
 WS[Web Server\nDjango + Channels]
 DB[(PostgreSQL)]
 REDIS[(Redis\n缓存 + WebSocket)]
 CELERY[Celery Worker\n后台任务]
 end

 subgraph &amp;#34;Outpost 层&amp;#34;
 PO[Proxy Outpost\nGo 反向代理]
 LO[LDAP Outpost\nGo LDAP 服务器]
 RO[Radius Outpost]
 end

 U --&amp;gt;|HTTPS| PO
 U --&amp;gt;|登录页面| WS
 APP --&amp;gt;|LDAP 认证| LO
 PO --&amp;gt;|OAuth2/OIDC/SAML| WS
 LO --&amp;gt;|内部 API| WS
 RO --&amp;gt;|内部 API| WS
 WS --&amp;gt; DB
 WS --&amp;gt; REDIS
 WS --&amp;gt; CELERY

 style WS fill:#4a90d9,color:#fff
 style PO fill:#e67e22,color:#fff
 style LO fill:#e67e22,color:#fff
&lt;/pre&gt;

&lt;p&gt;核心（Django + PostgreSQL + Redis）负责策略决策、用户管理和流程编排；Outpost 负责协议转换和流量代理。两者通过内部 API 通信，Outpost 可部署在完全不同的网络区域。&lt;/p&gt;</description></item><item><title>SuperTokens — 开发者友好的开源用户认证与会话管理 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/supertokens-deep-dive/</link><pubDate>Fri, 10 Jul 2026 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/supertokens-deep-dive/</guid><description>&lt;p&gt;SuperTokens 是一个开源的、面向开发者的用户认证与会话管理方案，由 SuperTokens 团队于 2020 年创建，当前最新稳定版为 &lt;strong&gt;v11.4.5&lt;/strong&gt;（2026 年 6 月发布），GitHub 15k+ star。核心用 Java 编写，提供 Node.js、Go、Python、React、React Native、Vanilla JS 等前端/后端 SDK，定位是 &lt;strong&gt;Auth0 / Firebase Auth / AWS Cognito 的开源替代品&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;SuperTokens 的核心理念：&lt;strong&gt;把认证做得像你自己写的一样可控，但省掉从头搭建的时间和安全风险。&lt;/strong&gt; 和 Keycloak 这类完整 IAM 平台不同，SuperTokens 选择做减法——只关注用户认证和会话管理，不涉及用户联邦、复杂协议代理或企业级身份编排。&lt;/p&gt;
&lt;h2 id="核心设计思路"&gt;核心设计思路&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;三层架构抽象&lt;/strong&gt;：Frontend SDK（管理 session token + 渲染登录 UI）→ Backend SDK（提供 sign-up/sign-in/session refresh API）→ Core HTTP 服务（核心认证逻辑 + 数据库操作）。每一层都可以独立替换。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协议隐藏而非暴露&lt;/strong&gt;：开发者不需要理解 OAuth 2.0 的 grant type、PKCE 或 Token 结构。调用 &lt;code&gt;signUp()&lt;/code&gt;/&lt;code&gt;signIn()&lt;/code&gt; 即可，SuperTokens 在后端 SDK 中处理所有协议细节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最小供应商锁定&lt;/strong&gt;：用户数据存在你自己的数据库中，切换 SuperTokens 不需要强制用户重新登录、重置密码或重新注册。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;功能解耦&lt;/strong&gt;：你可以只使用 SuperTokens 的登录功能，或只使用会话管理，甚至可以将会话管理与 Auth0 等其他登录提供商组合使用。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="架构全景"&gt;架构全景&lt;/h2&gt;
&lt;pre class="mermaid"&gt;
 flowchart TB
 subgraph &amp;#34;用户侧&amp;#34;
 BROWSER[浏览器&amp;lt;br/&amp;gt;React / Vanilla JS]
 MOBILE[移动端&amp;lt;br/&amp;gt;React Native / Flutter]
 SPA[SPA 应用]
 end

 subgraph &amp;#34;SuperTokens 体系&amp;#34;
 direction TB
 FE_SDK[Frontend SDK&amp;lt;br/&amp;gt;管理 Token 与 UI]
 BE_SDK[Backend SDK&amp;lt;br/&amp;gt;Node.js / Go / Python]
 CORE[SuperTokens Core&amp;lt;br/&amp;gt;Java HTTP 服务]
 DB[(PostgreSQL&amp;lt;br/&amp;gt;或 MySQL)]
 end

 subgraph &amp;#34;你的应用&amp;#34;
 API[业务 API]
 end

 BROWSER --&amp;gt;|登录/注册| FE_SDK
 MOBILE --&amp;gt;|登录/注册| FE_SDK
 SPA --&amp;gt;|登录/注册| FE_SDK
 FE_SDK --&amp;gt;|调用 signIn/signUp API| BE_SDK
 BE_SDK --&amp;gt;|认证逻辑与 DB 操作| CORE
 CORE --&amp;gt; DB
 BE_SDK --&amp;gt;|session 验证中间件| API
 API --&amp;gt;|验证 session| BE_SDK

 style CORE fill:#4a90d9,color:#fff
 style FE_SDK fill:#e67e22,color:#fff
 style BE_SDK fill:#27ae60,color:#fff
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;三层各自职责：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Zitadel 深度解读 — 事件驱动、多租户原生的开源 IAM 平台 | IDaaS Book</title><link>https://idaas.xlabs.club/docs/implementation/zitadel-deep-dive/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0800</pubDate><guid>https://idaas.xlabs.club/docs/implementation/zitadel-deep-dive/</guid><description>&lt;h2 id="zitadel-简介"&gt;Zitadel 简介&lt;/h2&gt;
&lt;p&gt;Zitadel 是一个用 Go 编写的开源身份与访问管理平台，截至 2026 年 7 月最新稳定版为 &lt;strong&gt;v4.15.3&lt;/strong&gt;（AGPL-3.0 许可证），GitHub 约 14,300 星。项目的核心理念是&amp;quot;Identity infrastructure, simplified for you&amp;quot;——通过事件驱动架构和原生多租户设计，把身份基础设施的复杂性封装成简洁的 API 和管理界面。&lt;/p&gt;
&lt;p&gt;一句话定位：&lt;strong&gt;事件溯源架构 + CQRS + 原生多租户的开源 IAM，适合需要完整审计追踪和多租户隔离的服务型平台&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;信息&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;项目&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://github.com/zitadel/zitadel" rel="external"&gt;github.com/zitadel/zitadel&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Go (后端) + TypeScript/Angular (前端)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;数据库&lt;/td&gt;
					&lt;td&gt;PostgreSQL（推荐）或 CockroachDB&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;许可证&lt;/td&gt;
					&lt;td&gt;AGPL-3.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;文档&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://zitadel.com/docs" rel="external"&gt;zitadel.com/docs&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;在线 SaaS&lt;/td&gt;
					&lt;td&gt;

&lt;a class="link link--text" href="https://zitadel.cloud" rel="external"&gt;zitadel.cloud&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心设计哲学"&gt;核心设计哲学&lt;/h2&gt;
&lt;p&gt;Zitadel 的设计和其他 IAM 有一个根本性的不同：&lt;strong&gt;它把&amp;quot;发生了什么&amp;quot;当作一等公民存储，而不是只存&amp;quot;当前状态是什么&amp;quot;&lt;/strong&gt;。这来自于三个核心选择：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Event Sourcing（事件溯源）&lt;/strong&gt;：不存储用户/项目的&amp;quot;当前快照&amp;quot;。每个操作——创建用户、修改密码、变更角色——都记录为不可变事件。当前状态是重放所有事件计算出来的。这意味着任何时间点的状态都可以追溯，任何变更都有完整审计线索。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CQRS（命令查询职责分离）&lt;/strong&gt;：写操作（命令）和读操作（查询）走不同的数据路径。命令生成事件，事件被投影到查询优化的视图。这让 Zitadel 可以独立扩展读写能力，尤其适合读多写少的身份场景。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;原生多租户&lt;/strong&gt;：从数据库 Schema 到 API 路由，多租户不是后加的特性，而是骨子里的设计。每个&amp;quot;Instance&amp;quot;（实例）可以有多个&amp;quot;Organization&amp;quot;（组织），每个 Organization 有独立的用户、项目、应用、授权策略。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="架构全景"&gt;架构全景&lt;/h2&gt;
&lt;pre class="mermaid"&gt;
 flowchart TB
 subgraph &amp;#34;用户与应用&amp;#34;
 U[用户浏览器]
 APP[下游应用 / API]
 MGMT[管理员]
 end

 subgraph &amp;#34;Zitadel 核心&amp;#34;
 direction TB
 API_L[&amp;#34;API Layer&amp;lt;br/&amp;gt;REST + gRPC&amp;#34;]
 
 subgraph &amp;#34;Command Side (写)&amp;#34;
 CMD[Command Handler&amp;lt;br/&amp;gt;命令处理器]
 ES[(Event Store&amp;lt;br/&amp;gt;事件存储&amp;lt;br/&amp;gt;PostgreSQL)]
 end
 
 subgraph &amp;#34;Query Side (读)&amp;#34;
 PROJ[Projections&amp;lt;br/&amp;gt;查询投影]
 QV[(Query Views&amp;lt;br/&amp;gt;查询视图)]
 end
 
 AUTHN[认证引擎&amp;lt;br/&amp;gt;OIDC / OAuth2 / SAML]
 AUTHZ[授权引擎&amp;lt;br/&amp;gt;RBAC + IAM Policy]
 end

 subgraph &amp;#34;存储层&amp;#34;
 PG[(PostgreSQL&amp;lt;br/&amp;gt;事件存储 + 查询视图)]
 end

 subgraph &amp;#34;通知与任务&amp;#34;
 JOB[后台任务&amp;lt;br/&amp;gt;通知/生命周期]
 end

 U --&amp;gt;|登录/注册| AUTHN
 APP --&amp;gt;|Token 验证| AUTHN
 APP --&amp;gt;|API 调用| API_L
 MGMT --&amp;gt;|管理操作| API_L
 
 API_L --&amp;gt; CMD
 CMD --&amp;gt; ES
 ES --&amp;gt; PROJ
 PROJ --&amp;gt; QV
 API_L -.-&amp;gt;|查询| QV
 
 AUTHN --&amp;gt; CMD
 AUTHN -.-&amp;gt;|验证| QV
 AUTHZ -.-&amp;gt;|策略评估| QV
 
 CMD --&amp;gt; JOB
&lt;/pre&gt;

&lt;p&gt;这个架构有几个值得展开的要点：&lt;/p&gt;</description></item></channel></rss>