CIAM 101: 身分驗證、身分識別、SSO
Logto 出於多種原因開始了 CIAM(我們會有另一篇文章討論這個)。在開發過程中,我們意識到在團隊中建立統一的理解會對我們的產品升級有幫助。我們希望這也能幫助你更好地了解 IAM 的領域。
Logto 出於多種原因開始了 CIAM(我們會有另一篇文章討論這個)。在開發過程中,我們意識到在團隊中建立統一的理解會對我們的產品升級有幫助。我們希望這也能幫助你更好地了解 IAM 的領域。
我開始建立 Logto 是因為我注意到身分識別與存取管理(IAM)隨著時間的推移變得越來越複雜且廣泛。IAM 的概念甚至足以衍生出新的概念,如 WIAM(員工 IAM)和 CIAM(顧客 IAM)。
雖然 WIAM 和 CIAM 共享相同的基礎,但它們有不同的用例:WIAM 通常 用於內部用戶,而 CIAM 用於外部顧客。 一些例子:
Logto 出於多種原因開始了 CIAM(我們會有另一篇文章討論這個)。在開發過程中,我們意識到在團隊中建立統一的理解會對我們的產品升級有幫助。我們希望這也能幫助你更好地了解 IAM 的領域。
讓我們開始吧!
在本文中,我們將專注於 CIAM 的基本概念以及我們在身分驗證流程中可能遇到的問題。我們還將討論單一登入(SSO)及其相關場景。
💡 身分驗證最初被定義為“你是誰?”。然而,當討論數位身分時,通過“證明擁有身分”來示範身分驗證更正確。(感謝 Calm-Card-2424)
如果發現某些東西不屬於這兩个類別中的任何一項,它很可能不是身分业务的重點。
身分通常代表用戶或機器。在成功驗證後,會出具 ID 令牌作為身分證明。
換句話說,驗證的主要目的是獲得身分。
租戶是一組身分:
當我們討論“多租戶”時,我們指的是多個 Logto 實例,它們在身分上互相隔離。換句話說,多個 Logto 實例。
注意這裡有兩個隔離的身分系統,也就是說,即使是相同的識別符(如電子郵件、電話等),你也不能在租戶 2 中使用租戶 1 的身分。這就像你的 Costco 會員資格無法在 Whole Foods 使用。
就像身分一樣,應用也屬於某個租戶。記住幾點:
這兩者之間的區別很棘手,但卻很重要。
你可以從 Google 找到各種服務提供者的解釋,但它們可能不夠滿意。在我看來,服務提供者是一個相對的概念:
考慮一個典型的社會登入場景:
❓ 在這個圖中有多少個服務提供者和身分提供者?
答案
兩者都有兩個。對 Logto 來說,iOS 應用是服務提供者,而 Logto 是身分提供者。對 GitHub 來說,Logto 是服務提供者,而 GitHub 是身分提供者。因此,Logto 同時是一個服務提供者和身分提供者。
你是一家科技解決方案公司的 CTO,你有超過 100 個業務合作夥伴,你已經交付了超過 300 個項目。
❓ Logto(或一個 CIAM 產品)可以怎樣幫忙?
為每個業務合作夥伴創建一個 Logto 實例。每個合作夥伴擁有一個租戶。項目在 Logto 中映射為“應用”。
Logto 提供一個通用的登入體驗(即 SSO)在一個租戶內,所以如果用戶已經簽到他們的租戶 的另一個應用裡了,他們就不需再次登入了。
我們發現“SSO”這個詞經常引起困惑。我們認為單一登入(SSO)是一种行為,而不是一種商業概念。因此,SSO 不等同於“在 WIAM 中的 SSO”。
當我們說“它需要 SSO”時,可以指以下幾種情況之一:
👉🏽 在一家大公司,員工使用相同的憑證登入所有公司授權的資源(例如電子郵件、 即時通訊、雲端服務)。
這是典型的 WIAM 情景。在這種情況下,只有一個身分提供者參與。我們現在不關心這個。
👉🏽 終端用戶使用相同的憑證登入同一公司開發的所有服務(例如 GSuite)。
Logto 目前專注於上面概述的方法。可能存在多個外部身分提供者,如第三方 社會登入提供者,它們獨立且不相連。
儘管如此,Logto 仍然是身分的唯一真實來源,只是向其他提供者“借用”身分。在這種情況下,Logto 作為身分提供者(對 GSuite 應用)和服務提供者(對外部身分提供者)。
👉🏽 終端用戶只能使用對應郵件域的特定身分提供者完成驗證。例如,使用 Google Workspace 登入 Figma。
這是 SSO 在 CIAM 中最常見的用例。讓我們仔細看看。
如果我們想使用 @silverhand.io 郵件登入 Figma,我們可以使用社交登入或 SSO。下圖說明了兩者的區別:
社交登入
SSO
用文字來說:
在這種情況下,Logto 同時是身分提供者和服務提供者。看起來 SSO 比一般的登入過程更加複雜。對於身分擁有者來說有什麼好處呢?
🤔 聰明的你一定已經注意到這實際上是從 SaaS 角度的 SSO 情況 1。
該討論 SSO 圖中的“X”了。這代表 Figma 連接郵件域到特定身分提供者的過程。但是,它是如何運作的呢?
由於需求通常來自企業客戶,我們將前一節的“SSO 情況 3”過程稱為“企業 SSO”來增加清晰度。
我們可以很容易地設計一個簡單的解決方案:建立郵件域與 SSO 方法之間的對應關係,然後手動更新它。
過程“X”的動作現在很明顯:
🔍 查找給定郵件域的對應企業 SSO 方法
因此,如果你將 silverhand.io 配置為有效的郵件域以連接到某個 Google Workspace SSO URL,使用 @silverhand.io 電子郵件嘗試登入的用戶將被重定向到對應的 Google Workspace 登入頁面,而不是在本地處理。
當你只有幾十個需要企業 SSO 的客戶時,手動管理映射是可以的。然而,還有更多的考慮:
還有很多。由於幾乎所有企業 SSO 都基於郵件域,我們可以很快想出一個更好的解決方案:
這個解決方案解決了前兩個問題:
1. 如果有成百或上千個企業 SSO 客戶呢?
2. “普通用戶”和“企業 SSO 用戶”之間有什麼關係?
至於第三個問題:
3. 應該隔離不同企業 SSO 客戶之間的数据吗?
我們提到了使用郵件域來識別應使用的特定企業 SSO 方法;換句話說,對特定群組用戶進行特定處理。
然而,客戶的需求往往不僅限於企業 SSO;例如,前面部分列出的問題 4 和 5。多年來,傑出的 SaaS 公司已經發展出一個成熟的模型來解決這些問題:組織。
組織規則
你可能會看到其他術語,如“工作區”、“團隊”或甚至“租戶”在軟體中。要識別它是否是我們正在討論的概念,只需檢查它是否代表“ 一組身分”。
在本文中,我們將使用術語“組織”以保持一致性。
在 Notion 中,你可以使用相同的電子郵件地址創建和加入多個工作區(即組織),並輕鬆在它們之間切換。
在 Slack 中,看起來也是一樣,但我們懷疑其背後使用了不同的身分,因為我們需要為每一個工作區創建一個新帳戶。

Slack 工作區

Notion 工作區
Notion 提供“個人計劃”,這通常是在內部作為一個組織實現的,內部有唯一的用戶(你)。我們不知道 Notion 的具體實現,但這一解釋對於我們的模型來說是合理且可行的。
每個組織也有一個識別符,通常稱為“組織域”。
❓ 應用可以與組織相關聯嗎?
答案
當然可以。我們在開始時討論過,應用可以擁有身分。你能舉例說明一個商業場景嗎?
3. 應該在不同企業 SSO 客戶之間隔離數據嗎?
4. 是否需要為企業 SSO 管理員提供一個儀表板來查看活躍用戶、審計日誌等?
5. 如何在用戶從企業 SSO 身分提供者中被移除時自動停用帳戶?
我們介紹了幾個概念:身分驗證(AuthN)、授權(AuthZ)、身分、租戶、應用、身分提供者(IdP)、服務提供者(SP)、單一登入(SSO)和企業 SSO(組織)。理解這些概念可能需要一些時間。
在寫這篇文章時,我發現有趣的是,線上服務中最昂貴的計劃通常包括與授權相關的獨特功能,這在本文中完全未被提及。你可能已經對授權有一些疑問,例如: