sean.
Back to notes

導入單點登入系統 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