原來可以這麼寫:在 Drupal 串接 SSO 的血淚史(1)
· 閱讀時間約 3 分鐘
最近在工作上接到一個任務:幫客戶把系統做成 SSO(Single Sign-On)。
一開始我其實想得很簡單,心裡想:「不就是登入整合嗎?」 結果實際做下去才發現,這一塊的世界比我想像中複雜非常多。
一開始的天真:我以為 SSO 只有兩種
老實說,我一開始的認知是:
SSO = SAML 或 OpenID Connect
但實際做下去後才發現這個理解其實不完整。
現在比較能確定的是:
- SSO 是一種「架構 / 使用體驗」
- OpenID Connect、SAML 只是「實作方式」
- 還有像 LDAP、Session、甚至 Kerberos 也可以達到 SSO
這個觀念是在實作過程中慢慢修正過來的。
我實際做了什麼
這次主要是在 Drupal 上做整合,流程大概是:
1. OpenID Connect(最順的一個)
- 安裝模組
- 設定 Provider
- 基本上流程最清楚
目前理解:
- OAuth 2.0 是「授權」
- OpenID Connect 是在上面加一層「我是誰」
👉 這個是目前最能理解、也最現代的一套
2. SAML(開始痛苦)
SAML 最大的痛點是:
- 全部都是 XML
- 要交換 metadata
- 要理解 Assertion
我花了一段時間在搞懂:
- Service Provider(SP)
- Identity Provider(IdP)
- XML metadata 交換
而且一開始很困惑:
「到底要不要公開網址? callback 在哪?」
這一段真的不是看一次文件就懂,要邊試邊 debug。
3. LDAP(目前還在卡)
目前狀態:
- 模組裝好了
- 連線有在測
- 但設定還沒完全打通
現在的理解還很粗淺:
LDAP 比較像是企業內部用來「查詢使用者」的協議
跟 OIDC / SAML 那種「登入流程」的感覺其實不太一樣。
最痛苦的三件事
1. 概念混在一起
最一開始真的會混亂:
- OAuth、OIDC、SAML 都在講登入?
- 為什麼 OAuth 不是登入?
- LDAP 又是什麼東西?
後來才慢慢拆開:
- OAuth = 授權
- OIDC = 登入(基於 OAuth)
- SAML = 另一種登入(但比較舊)
- LDAP = 查資料(偏底層)
2. 文件不好讀(尤其 SAML)
SAML 的文件真的偏硬:
- XML 很冗長
- 名詞很多(Assertion、Binding、Metadata)
- 範例不直覺
常常看完還是不知道「我要填什麼」。
3. Debug 很抽象
不像一般 API:
- 不是單純 request / response
- 有 redirect
- 有 token
- 有 XML assertion
錯了也不一定有明確錯誤訊息,只能一直試。
我是怎麼撐過來的
老實說沒有什麼捷徑:
- 問 AI(真的幫很多)
- 看官方文件
- 找文章
- 自己測試、亂試
有時候甚至是:
改一個設定 → 試 → 壞掉 → 再改回來
慢慢拼湊出整體理解。
目前我對這幾個東西的理解(不完美版)
這是我現在的版本,之後應該還會再修正:
- OAuth:一個授權協議(讓系統可以存取資源)
- OpenID Connect:基於 OAuth 的身份驗證
- SAML:用 XML 做的身份驗證(偏傳統)
- LDAP:企業內部用來查詢使用者的協議
一點心得
這次最大的收穫其實不是「我完全搞懂了 SSO」, 而是開始知道這些東西在整個系統中的位置。
以前看到這些名詞會覺得很抽象, 現在至少知道:
- 哪個是授權
- 哪個是登入
- 哪個是資料來源
雖然還沒完全熟,但已經不是完全陌生的黑盒子。
如果之後有機會,我應該會再補一篇:
「用實際流程講清楚 OIDC / SAML 登入到底發生什麼事」
因為我自己現在也還在把這一塊補完整。