案例研究:使用 Logto Organizations 構建多租戶系統
學習如何為多租戶系統設置一個堅實且可擴展的身份基礎,使用 Logto Organizations。
如今,多租戶系統成為應用程序或 SaaS 的重要組成部分。它通常涉及用戶、組織、角色和權限之間的複雜關係。例如,一個用戶可以是多個組織的成員,反之亦然;一個用戶也可以在不同的組織中擁有不同的角色。
問題所在
這不僅會在一開始引起麻煩,還會在應用的長期維護中引起問題。傳統的基於角色的訪問控制(RBAC)模型可以部分解決此問題,但當用戶和組織的數量增加時,很快會成為噩夢。
例如,一開始你可能每個組織中只有兩個角色:admin
和 member
。當你有 10 個組織時,你將管理 20 個角色;當你有 1,000 個組織時,你將管理 2,000 個角色。
隨著業務增長,你可能需要添加更多角色,例如 guest
、developer
等。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
角色。
在你的應用中請求組織令牌
在你的客戶端應用中,現在你可以從 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。