導入單點登入系統 Keycloak
為了解決多個平台(地圖、導航、車隊管理)使用者資料分散、難以維護的痛點,決定導入開源單點登入系統 Keycloak,實現集中化權限控管與標準化認證流程。
Created
Mar 20, 2026
01
發生了什麼事情?
隨著公司服務擴張,除了原有的地圖展示平台,連導航 APP 與車隊管理系統都跑出來了!
最痛苦的是每個後端都要維護自己的一套 User Table。身為工程師的直覺告訴我,這絕對不是長久之計!(/‵Д′)/~ ╧╧
02
救星出現:什麼是 SSO (Single Sign-On)?
在技術實作上,SSO 是將「身分驗證」從各個業務 Service 中抽離,收斂到單一的 Identity Provider (IdP)。
- 認證託管: 所有使用者的帳號、密碼、多因子驗證 (MFA) 全都由 Keycloak 負責,後端不再接觸敏感資料。
- 標準化 Token: 登入成功後,Keycloak 會核發一個加密的
JWT (JSON Web Token)。 - 無狀態驗證: 後端 Service 收到請求時,只需要透過 Keycloak 的
Public Key驗證 Token 的簽名與有效期限,即可確認使用者身分,完全不需要查詢本地資料庫。
03
為什麼是 Keycloak?
主管給了一個明確的大方向:「要強大、要開源、重點是自行架設(省錢?)。」 在茫茫的開源海中,我一眼就相中了 Keycloak。
| 優勢項目 | 為什麼選它? | 結論 |
|---|---|---|
| 協定支援 | 完整支援 OAuth2.0 / OIDC / SAML | 極強 (主流通吃) |
| 客製化 | 登入頁面與 Email 範本都能自定義 | 彈性 (符合品牌) |
| 擴充性 | 輕鬆整合 Google, GitHub 等第三方登入 | 方便 (使用者愛用) |
| 社群基數 | 紅帽背書,社群討論度極高 | 安心 (不怕沒解答) |
04
角色定位:Keycloak 到底在幹嘛?
在這次的架構重整中,Keycloak 變成我們系統的唯一驗證端點,後端再也不用親自去戳資料庫看密碼對不對,只要負責驗證 Keycloak 發過來的 Token 就好,開發壓力大大減輕!
Loading architecture diagram...
05
執行結果
- 資料集中化: 所有使用者都在 Keycloak 裡面,改一個地方全平台生效。
- 權限控管超簡單: 透過 Role-based Access Control (RBAC),誰能進車隊管理、誰能看地圖,點點滑鼠就搞定。
- 搬遷無壓力: 之後如果要換伺服器或擴展服務,認證這一塊已經完全解耦。
06
經驗總結
引入成熟的開源方案(如 Keycloak),不僅能解決使用者資料分散的硬傷,還能讓後端工程師專注在核心業務邏輯上。( •̀ ω •́ )✧
不缺錢的話直接使用供應商提供的也是可行 (・∀・)つ💸
導入 JWT 之前必須考慮現有服務的需求,JWT 常見的缺點是無法立刻 revoke 導致 token 還是可以持續使用一段時間,依照需求可能還是需要自行建立 session 管理登入狀態。
Continue reading