繁體中文(台灣)
  • organizations
  • collaboration
  • identity
  • user management
  • authentication
  • authorization

案例研究:使用 Logto Organizations 構建多租戶系統

學習如何為多租戶系統設置一個堅實且可擴展的身份基礎,使用 Logto Organizations。

Gao
Gao
Founder

如今,多租戶系統成為應用程序或 SaaS 的重要組成部分。它通常涉及用戶、組織、角色和權限之間的複雜關係。例如,一個用戶可以是多個組織的成員,反之亦然;一個用戶也可以在不同的組織中擁有不同的角色。

問題所在

這不僅會在一開始引起麻煩,還會在應用的長期維護中引起問題。傳統的基於角色的訪問控制(RBAC)模型可以部分解決此問題,但當用戶和組織的數量增加時,很快會成為噩夢。

組織示例

例如,一開始你可能每個組織中只有兩個角色:adminmember。當你有 10 個組織時,你將管理 20 個角色;當你有 1,000 個組織時,你將管理 2,000 個角色。

隨著業務增長,你可能需要添加更多角色,例如 guestdeveloper 等。RBAC 模型的複雜性將指數增長。

當我們構建 Logto Cloud 時,也遇到了同樣的問題。我們很快意識到這是行業中的一個常見問題,我們需要解決它。而 Logto Organizations 就是為了解決這個問題而誕生的。

組織模板

一個簡單的問題:為什麼 SaaS 應用是 SaaS?我們相信可擴展性是最重要的原因之一。換句話說,適用於一個客戶的方案應該適用於所有客戶。

這就引出了"組織模板"的概念。組織模板是每個組織訪問控制模型的藍圖:它定義了適用於所有組織的角色和權限。

假設我們為每個組織設置了兩個角色:

  • admin:可以管理組織,包括添加/移除成員、變更角色等。
  • member:可以訪問組織的資源並邀請新成員。

我們可以通過以下配置創建一個組織模板:

組織模板

將用戶添加到組織中

自從我們設置了組織模板,管理用戶變得簡單且自然。你可以通過 Logto Console(Web UI)或 Logto Management API 將用戶添加到組織中。

查看配置組織以了解更多信息。

我們使用以下設置添加了兩個組織:

  • 組織 A:Alice 和 Bob 都是成員。Alice 擁有 admin 角色,Bob 擁有 member 角色。
  • 組織 B:只有 Alice 是成員,她擁有 member 角色。

組織 A

組織 B

在你的應用中請求組織令牌

在你的客戶端應用中,現在你可以從 Logto 請求組織訪問令牌(組織令牌)。組織令牌是一個包含必要信息的 JWT 令牌,以便你的服務驗證用戶是否在組織中有權限。

請求組織令牌的詳細步驟在將組織與你的應用集成中介紹。

假設 Alice 已登入你的應用,她想要刪除組織 A 的一個用戶。你的應用可以為 "組織 A" 請求一個具備 remove:member 權限(範圍)的組織令牌。Logto 將驗證 Alice 是否在組織中具有此權限,並返回一個組織令牌,因為她具有 admin 角色:

以下是一些錯誤情況的示例:

  • 如果 Bob 想刪除組織 A 的一名用戶,Logto 會返回錯誤,因為他在組織 A 中沒有 admin 角色。
  • 如果 Alice 想刪除組織 B 的一名用戶,Logto 也會返回錯誤,因為她在組織 B 中沒有 admin 角色。
  • 如果 Bob 想在組織 B 請求任何權限的組織令牌,Logto 會返回錯誤,因為他在組織 B 中沒有成員資格。

你的應用在收到組織令牌後,可以將其添加到 Authorization 標頭中,然後調用你的服務。

在你的服務中驗證組織令牌

在你的服務中,你可以通過標準的 JWT 驗證過程驗證組織令牌。查看驗證組織令牌以了解更多詳情。

更新組織模板

當你需要更新組織模板時,例如添加一個名為 developer 的新角色,可以在 Logto Console 或通過 Logto Management API 完成。變更將自動應用於所有組織,且無需停機。

組織角色新

結論

通過 Logto Organizations,管理和擴展多租戶系統變得標準化且舒適化。你可以專注於你的業務邏輯,將身份和訪問控制交給 Logto。