案例研究:利用 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(網絡界面)或 Logto Management API 將用戶添加到組織中。
查看 Configure organizations 了解更多信息。
我們添加了兩個組織並設置如下:
- 組織 A:Alice 和 Bob 都是成員。Alice 擁有
admin
角色,Bob 擁有member
角色。 - 組織 B:只有 Alice 是成員,她擁有
member
角色。
在你的應用中請求組織令牌
在你的客戶端應用中,現在你可以從 Logto 請求組織訪問令牌(組織令牌)。組織令牌是一個 JWT 令牌,包含你的服務驗證用戶是否具有組織內權限所需的信息。
請求組織令牌的詳細步驟在 Integrate Organizations with your app 中描述。
假設 Alice 已登錄到你的應用中,她想要在組織 A 中移除一個用戶。你的應用可以請求一個具有 remove:member
權限(範圍)的"組織 A"的組織令牌。Logto 會驗證 Alice 是否在組織中具備該權限,並返回組織令牌,因為她具有 admin
角色:
以下是一些錯誤案例的示例:
- 如果 Bob 想在組織 A 中移除一個用戶,Logto 會返回錯誤,因為他在組織 A 中沒有
admin
角色。 - 如果 Alice 想在組織 B 中移除一個用戶,Logto 也會返回錯誤,因為她在組織 B 中沒有
admin
角色。 - 如果 Bob 想用任何權限請求組織 B 的組織令牌,Logto 會返回錯誤,因為他在組織 B 中沒有成員身份。
當你的應用收到組織令牌後,可以將其添加到 Authorization
標頭中來調用你的服務。
在你的服務中驗證組織令牌
在你的服務中,你可以通過標準的 JWT 驗證流程來驗證組織令牌。查看 Verify organization tokens 獲取更多詳情。
更新組織模板
當你需要更新組織模板時,例如新增一個叫 developer
的新角色,你可以在 Logto Console 或通過 Logto Management API 進行。這一變更將自動應用於所有組織,而不會有任何停機時間。
總結
利用 Logto Organizations,管理和擴展多租戶系統變得標準化和舒適。你可以專注於你的業務邏輯,並將身份和訪問控制交給 Logto。