Keycloak教學手冊 文件資訊 項目 內容 文件版本 2.0 最後更新 2026-09-30 版本基準 Keycloak 26.7.4(2026-09-16 發佈)、keycloak-js 26.2.x(獨立發版)、Spring Boot 4.1 / Spring Security 7.1 文件定位 企業標準技術白皮書/內部標準教材 適用對象 後端工程師、前端工程師、系統架構師、DevOps/SRE、資安人員、稽核人員 使用情境 大型企業、金融業(銀行/證券/保險)內部與對外系統之身分與存取管理 前一版本 1.0(2026-01-29,適用 Keycloak 24.x/25.x) 文件維護 內部技術團隊 Created by Eric Cheng 📌 v2.0 改版重點:全面對齊 Keycloak 26.7;修正 v1.0 中已被移除或棄用的設定(KEYCLOAK_ADMIN、KC_PROXY、hostname v1、KC_CACHE_STACK=kubernetes 等);新增 Grant Type 選擇、BFF、Organizations、Passkeys、DPoP、FAPI 2.0、Token Exchange V2、可觀測性、Rolling Update、設定即程式碼、MCP/AI Agent 授權等章節。完整差異見 附錄 D 版本紀錄,查證依據見 附錄 E 查證紀錄。
閱讀指引 讀者角色 建議閱讀章節 初次接觸 Keycloak 第一章 → 第二章 → 第三章 3.1 → 第四章 前端/後端開發人員 第二章 2.3–2.6 → 第五章 → 第六章 架構師 第一章 1.6–1.7 → 第二章 → 第八章 → 第十章 → 第十二章 DevOps/SRE 第三章 → 第七章 → 第八章 8.1 → 第九章 → 第十一章 資安/稽核人員 第一章 1.7 → 第八章 → 第七章 7.2 → 附錄 A 本文慣例 標記 意義 > 🆕 **v2.0 新增** 本版新增的章節或內容 > ⚠️ **v2.0 更正** 修正 v1.0 錯誤或已過時的內容 > ⚠️ **實務注意** 容易出錯、需特別留意之處 > 💡 **建議** 企業實務建議做法 Supported/Preview/Experimental 依 Keycloak 官方功能成熟度分類;Preview 與 Experimental 功能不建議直接用於正式環境 目錄 文件資訊 閱讀指引 本文慣例 第一章:Keycloak 簡介與核心概念 1.1 Keycloak 是什麼? 1.1.1 核心功能 1.1.2 適用場景 1.1.3 與其他 IAM 方案比較 1.2 IAM、SSO、OAuth 2.0、OIDC 關係說明 1.2.1 名詞解釋 1.2.2 OAuth 2.0 vs OIDC 差異 1.3 Token 類型說明 1.3.1 詳細說明 1.3.2 Access Token 結構範例(JWT) 1.4 核心概念:Realm、Client、User、Role、Group 1.4.1 概念說明 1.4.2 Realm 設計原則 1.5 Authentication vs Authorization 1.5.1 實務流程 1.6 版本發佈節奏與支援策略 1.6.1 版本編號與發佈節奏 1.6.2 執行環境需求 1.6.3 功能成熟度分類 1.7 標準協定地圖 1.8 💡 本章實務建議 第二章:系統架構設計 2.1 Keycloak 在企業系統中的角色 2.1.1 責任分工 2.2 整合架構說明 2.2.1 與 Web 前端(SPA)整合 2.2.2 與 Backend API 整合 2.2.3 與 API Gateway 整合 2.2.4 與 AD / LDAP 整合 2.2.5 與外部身分提供者(Identity Brokering)整合 2.2.6 與行動 App/原生應用整合 2.3 Token Flow(Authorization Code Flow + PKCE) 2.4 Grant Type 選擇矩陣 2.5 PKCE(Proof Key for Code Exchange)深入 2.5.1 運作原理 2.5.2 產生範例 2.5.3 Keycloak 設定 2.6 BFF 模式(Backend for Frontend) 2.7 Organizations 多租戶(B2B) 2.8 💡 本章實務建議 第三章:Keycloak 安裝與部署 3.1 單機部署(Docker) 3.1.1 開發/測試環境快速啟動 3.1.2 使用 Docker Compose 建立開發環境(含 PostgreSQL) 3.2 生產環境部署建議 3.2.1 資料庫選擇 3.2.2 建置最佳化映像(Optimized Image) 3.2.3 生產環境 Docker Compose 3.2.4 Nginx Reverse Proxy 設定 3.2.5 對外公開路徑建議 3.2.6 TLS 部署模式 3.3 基本啟動參數與環境變數 3.3.1 設定來源與優先順序 3.3.2 常用選項 3.3.3 Hostname v2 設定情境 3.3.4 啟動模式與常用指令 3.4 Admin Console 存取方式 3.4.1 存取 URL 3.4.2 首次登入與管理員治理 3.4.3 重要端點 3.5 管理介面(Port 9000)與健康檢查 3.6 Kubernetes Operator 部署 3.6.1 安裝 Operator 3.6.2 Keycloak CR 範例 3.7 💡 本章實務建議 第四章:Keycloak 基本設定 4.1 Realm 建立與規劃原則 4.1.1 建立 Realm 步驟 4.1.2 Realm 設計原則 4.1.3 企業 Realm 規劃範例 4.1.4 新 Realm 上線前必設項目 4.2 Client 類型說明 4.2.1 Client 類型比較 4.2.2 Client 驗證方式(Client Authenticator) 4.2.3 建立 Client 步驟 4.2.4 Confidential Client 設定範例(BFF/伺服器端 Web) 4.2.5 Service Account Client 設定範例(批次/服務對服務) 4.2.6 Public Client 設定範例(SPA/行動 App) 4.3 Redirect URI 與 Web Origin 設定 4.3.1 Redirect URI 設定原則 4.3.2 Web Origin 設定(CORS) 4.3.3 Post Logout Redirect URI 4.4 User、Role、Group 設定策略 4.4.1 User 管理 4.4.2 建立使用者 4.4.3 Group 階層設計 4.5 Realm Role vs Client Role 使用時機 4.5.1 使用時機比較 4.5.2 Composite Role 與預設角色 4.5.3 最佳實務 4.6 Client Scopes 與 Protocol Mapper 4.6.1 Default 與 Optional Scope 4.6.2 常用 Protocol Mapper 4.6.3 Audience 設計(重要) 4.6.4 Full Scope Allowed 與 Token 瘦身 4.7 宣告式 User Profile 4.8 Authentication Flow 與 Required Actions 4.8.1 內建 Flow 4.8.2 自訂 Browser Flow 範例(帳密 + 強制 OTP/Passkey) 4.8.3 Required Actions 4.9 Fine-Grained Admin Permissions V2 4.10 💡 本章實務建議 第五章:應用系統如何串接 Keycloak 5.1 Web 前端串接(OIDC) 5.1.1 使用 keycloak-js 官方套件 5.1.2 初始化設定 5.1.3 Vue 3 整合範例 5.1.4 React 整合範例 5.1.5 API 呼叫時帶入 Token 5.2 Backend API 驗證 Token 機制 5.2.1 Token 驗證流程 5.2.2 驗證方式比較 5.2.3 JWKS 快取與金鑰輪替 5.3 Spring Boot 整合 5.3.1 依賴設定(Maven) 5.3.2 應用程式設定 5.3.3 Security 設定類別 5.3.4 Keycloak 角色轉換器 5.3.5 Controller 範例 5.3.6 呼叫下游服務(Client Credentials) 5.4 Node.js 整合 5.5 常見錯誤與除錯方式 5.5.1 常見錯誤對照表 5.5.2 除錯技巧 5.6 細粒度授權(Authorization Services) 5.7 Admin REST API 與 kcadm.sh 5.7.1 以 Service Account 呼叫 Admin REST API 5.7.2 kcadm.sh(Admin CLI) 5.7.3 Java Admin Client 5.8 💡 本章實務建議 第六章:系統使用情境說明 6.1 SSO 登入流程實例 6.1.1 SSO 實務注意事項 6.2 使用者角色異動後的影響 6.2.1 角色變更生效時機 6.2.2 企業實務建議 6.3 Token 生命週期與 Refresh 機制 6.3.1 時效設定與預設值 6.3.2 Offline Token 6.3.3 前端 Token Refresh 實作 6.4 Logout 流程(Single Logout) 6.4.1 Logout 類型 6.4.2 RP-Initiated Logout 6.4.3 Back-Channel Logout(建議) 6.5 Step-up 認證與認證強度(ACR/LoA) 6.6 服務間呼叫與 Token Exchange 6.6.1 選擇方式 6.6.2 Standard Token Exchange 設定 6.7 💡 本章實務建議 第七章:系統維運與管理 7.1 使用者與權限管理最佳實務 7.1.1 使用者管理原則 7.1.2 JML 流程與 Keycloak 對應 7.1.3 權限審核 Checklist 7.2 Audit Log 與事件追蹤 7.2.1 啟用事件記錄 7.2.2 重要事件類型 7.2.3 事件查詢 API 7.2.4 將事件送往 SIEM 7.3 Keycloak Log 說明 7.3.1 Log 等級與輸出設定 7.3.2 常見 Log 訊息解讀 7.3.3 Log 整合建議 7.4 可觀測性:Metrics 與 Tracing 7.4.1 Metrics 7.4.2 Tracing(OpenTelemetry) 7.5 Workflows 與 SCIM 7.5.1 Workflows(26.6 起正式支援) 7.5.2 SCIM API(26.7 Preview) 7.6 常見營運問題 7.6.1 問題 1:使用者無法登入 7.6.2 問題 2:Token 驗證失敗 7.6.3 問題 3:效能問題 7.6.4 問題 4:Hostname 或 Proxy 設定錯誤 7.6.5 問題 5:升級後管理 API 或整合失效 7.7 💡 本章實務建議 第八章:高可用與資安建議 8.1 Keycloak HA 架構概念 8.1.1 部署架構選擇 8.1.2 快取與 Session 8.1.3 容量規劃(官方 Sizing 指南) 8.1.4 HA 部署要點 8.2 Session 與 Token 設計考量 8.2.1 Session 設計原則 8.2.2 Refresh Token Rotation 8.3 HTTPS 與憑證管理 8.3.1 HTTPS 部署方式 8.3.2 憑證與信任庫設定 8.3.3 憑證管理建議 8.4 防止 Token 洩漏的設計原則 8.4.1 Token 儲存原則 8.4.2 安全設計 Checklist 8.5 與企業資安政策的搭配方式 8.5.1 密碼政策(依 NIST SP 800-63B-4) 8.5.2 密碼雜湊 8.5.3 暴力破解防護 8.5.4 Security Headers 8.5.5 MFA:OTP、Passkeys 與備援碼 8.6 進階 Token 安全:DPoP、PAR 與 FAPI 2.0 8.6.1 DPoP(RFC 9449,26.4 起支援) 8.6.2 PAR(RFC 9126) 8.6.3 Client Policies 與 FAPI 2.0 8.7 機密管理與 FIPS 8.7.1 Vault 整合 8.7.2 FIPS 140 模式 8.8 資安公告與漏洞管理 8.9 💡 本章實務建議 第九章:系統升級與版本管理 9.1 升級前檢查事項 9.1.1 升級前 Checklist 9.1.2 版本資訊查詢 9.2 升級策略:Rolling Update 與 Recreate 9.2.1 使用 update-compatibility 判斷 9.3 資料庫相容性注意事項 9.3.1 資料庫升級流程 9.3.2 Schema 遷移方式 9.3.3 26.7 資料庫相關變更 9.4 版本變更與設定風險 9.4.1 重大架構變更歷史 9.4.2 26.6 → 26.7.4 破壞性與行為變更 9.4.3 已棄用、將移除的功能 9.4.4 設定遷移建議 9.5 Rollback 建議策略 9.5.1 Rollback 計畫 9.5.2 時間評估 9.6 💡 本章實務建議 第十章:最佳實務與設計建議 10.1 Realm / Client 命名規範 10.1.1 命名規範建議 10.2 多系統共用 Keycloak 的設計原則 10.2.1 架構設計 10.2.2 Token 內容標準 10.3 銀行或大型企業常見踩雷點 10.3.1 踩雷案例 1:Token 過大 10.3.2 踩雷案例 2:AD 整合效能差 10.3.3 踩雷案例 3:Refresh Token 被盜用 10.3.4 踩雷案例 4:升級後前端登入失敗 10.3.5 踩雷案例 5:Hostname 設定錯誤導致 iss 不一致 10.3.6 踩雷案例 6:透過 Mapper 帶入的管理角色失效 10.3.7 踩雷案例 7:第三方 Cookie 限制導致 SSO 狀態偵測失效 10.3.8 踩雷案例 8:Service Account 權限過大 10.4 開發、測試、正式環境隔離建議 10.4.1 環境隔離架構 10.4.2 環境設定管理 10.4.3 設定同步建議 10.5 💡 本章實務建議 第十一章:設定即程式碼與自動化 11.1 為何需要設定即程式碼 11.2 Realm Export/Import 11.2.1 CLI 匯出/匯入 11.2.2 Admin Console/REST API 部分匯入 11.3 keycloak-config-cli 11.4 Operator KeycloakRealmImport 11.5 Terraform Provider 11.6 工具選擇比較 11.7 CI/CD 與環境升遷 11.8 💡 本章實務建議 第十二章:新興標準與 AI Agent 授權 12.1 功能成熟度總覽 12.2 Keycloak 作為 MCP 授權伺服器 12.2.1 規範支援狀態 12.2.2 設定步驟(MCP 2025-06-18 以後) 12.3 Client ID Metadata Document(CIMD) 12.4 Identity Assertion JWT Grant(ID-JAG) 12.5 Shared Signals Framework(SSF) 12.6 AuthZEN 12.7 OID4VCI(可驗證憑證發行) 12.8 評估與導入建議 12.9 💡 本章實務建議 附錄 A:檢查清單(Checklist) A.1 初次部署檢查清單 A.2 日常維運檢查清單 A.3 系統整合檢查清單 A.4 升級前檢查清單 附錄 B:常見 Q&A B.1 Q1:忘記 Admin 密碼怎麼辦? B.2 Q2:如何批次匯入使用者? B.3 Q3:Token 過期時間如何調整? B.4 Q4:如何查看目前線上使用者? B.5 Q5:Client Secret 外洩怎麼辦? B.6 Q6:如何實作 API 的細粒度授權? B.7 Q7:使用者被暴力破解防護鎖定,如何解鎖? B.8 Q8:如何在不停機的情況下輪替 Client Secret? B.9 Q9:升級後登入或 API 大量失敗,如何處理? B.10 Q10:登入後被導向內部網址或出現「HTTPS required」? 附錄 C:版本功能對照表 附錄 D:版本紀錄 D.1 版本歷程 D.2 v1.0 → v2.0 更正表 D.3 v2.0 新增章節 附錄 E:查證紀錄 E.1 待確認事項 附錄 F:參考資料 第一章:Keycloak 簡介與核心概念 1.1 Keycloak 是什麼? Keycloak 是開源的 身分與存取管理(Identity and Access Management, IAM) 解決方案,提供單一登入(SSO)、身分聯合、使用者管理與細緻授權等能力,並以 OAuth 2.0、OpenID Connect(OIDC)與 SAML 2.0 等標準協定對外提供服務。
...