跳至主要内容

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

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

關於 SQL 的那些小坑(1)

· 閱讀時間約 2 分鐘

在開發時,遇到一個問題

SQLSTATE[HY000]: General error: 1 HAVING clause on a non-aggregate query

看起來,我的 SQL 語法並沒有問題呀!

後來才熊熊發現,網路上教學的那是MySQL!!!

架站筆記

· 閱讀時間約 7 分鐘
提示

持續更新中 💪

我自己寫了一個 Side Project。 這個 Project 預計就是拿來做面試的火力展示(我就是來玩的 😤)、以及各種我想要幫自己生活自動化、幫助我自己的服務。 例如:

  • 詢問黃金價格(目前有自己公開的 API & Line)
  • 詢問棒球比賽分數(不過目前用免費的外部 API 有點弱這一塊)
  • 查詢空氣品質、查詢目前所在的位置(Line)
  • 星座運勢查詢(API & Line)
  • 串接 AI 做翻譯、做精簡文字功能 (Prompt Engineering / Line)

目前 Line 帳號只是自己在玩自己在用,我需要多多整理一下另外調整一下 icon 玩一下選單等功能在 Project 開放展示這樣...

順便來學習怎麼自己架設 PHP、Nginx、PostgreSQL、Redis 以及 Ubuntu Server。這個過程中遇到不少挑戰,也累積了不少經驗,未來會持續記錄相關心得與技術細節。

搬家記

· 閱讀時間約 5 分鐘
資訊

本人三心二意,Blog 的形式從最早期的WordPressHugo,這次換到Docusaurus
希望這是最後一次 XD
從原本用免費網域到用付費網域...現在應該可以確定就是使用Cloudflare了哈哈

最近我把我的部落格從 Hugo 搬到了 Docusaurus,主要原因是想要把技術筆記和部落格放在同一個專案裡管理,讓寫作與維護更方便。

Web API 設計原則筆記

· 閱讀時間約 4 分鐘

「所有架構都來自於設計,但並非所有設計都能成為架構,架構來自於一系列重要的設計決策,這些決策塑造了一個系統的形式及功能」

「軟體開發者總是花費大量的時間在學習,學習那些他們未知的東西,這其他工作截然不同,因為我們的每一次總是我們的第一次(儘管在外人看來都是在敲鍵盤)。」

PyCon 2024 心得

· 閱讀時間約 2 分鐘

這個週末不耍廢,參加 PyCon 增加知識 Level Up Up ! 這次 PyCon 難得搬到南部來辦,感覺真的是一個很棒的機遇!

於是,我便速速在早鳥階段買票

  • 拿到了衣服
  • 玩了一些大地遊戲
  • 聽了一些議程
  • 吃了一些便當和點心 XD

讀巨人的筆記

· 閱讀時間約 2 分鐘

日前逛誠品書店,在推薦書架上看到了這本「巨人的筆記」...看了看裡面的內容,於是就給他買下去了。作者是一位「紀錄學」教授,老實講我是蠻意外居然有這種學問就是了...

購書連結

或許是翻譯問題吧?總覺得書裡內容總是會讓我有點搞混筆記與紀錄的意思,但是他給我一個蠻有趣的想法:「不要總是想當一個成功的人,而是要當一個 『成長的人』

持續買進

· 閱讀時間約 3 分鐘

過年其實也沒做什麼,就是把 Docker 練習一下、趁著 Udemy 特價又敗了三堂課程,一個 Laravel、一個 道德駭客相關、一個 GTM 相關(詳情可以看我上一篇文章...老子學不動了 05)

不過,也是有稍微提升一下自己的 「FQ」,綜觀去年一整年,我看有相關的書籍應該就是持續買進了吧