跳至主要内容

原來可以這麼寫:在 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 登入到底發生什麼事」

因為我自己現在也還在把這一塊補完整。