繁體中文(台灣)
  • authz
  • authn
  • concept

什麼是 AuthZ(授權)?

探索 AuthZ 的定義、AuthN 與 AuthZ 的差異、AuthZ 的運作方式以及授權的最佳實踐。

Guamian
Guamian
Product & Design

什麼是 AuthZ,它與 AuthN 有什麼不同?

AuthZ 是 授權 的縮寫。授權是與 認證 不同的機制。認證確認你是誰,而授權則決定你是否可以訪問特定資源以及可以對其執行什麼操作。

在現實世界的例子中,資源可以包括軟體、系統、文件、訂單和資產。授權增加了一層額外的控制,規定了誰可以訪問這些資源以及在什麼條件下訪問。

AuthZ 如何運作?

授權雖然與認證分開,但通常會與認證連接。例如,像 OAuth 2.0OIDCSAML 等標準協議會結合基於令牌的授權機制。

在基於令牌的授權系統中,授權伺服器向用戶授予 訪問令牌。該令牌包含權限,可以決定用戶是否可以訪問某些資源。

直接向用戶分配權限可能效率不高,尤其是在需要更詳細條件時。舉例而言,訪問權可能取決於特定情況,比如用戶的位置,因此訪問控制政策對於更好的權限管理是必要的。

以下是授權運作的逐步高層次流程:

  1. 啟動認證:用戶通過選擇標識符和方法(如使用電子郵件和密碼)登錄。
  2. 授權請求:登錄後,用戶請求訪問資源,並包含例如用戶 ID 和角色等詳細信息。
  3. 訪問控制驗證:系統根據預定義的授權政策檢查請求,這些政策可以是基於角色或屬性的規則。
  4. 授權決策:系統根據政策和權限決定是授予還是拒絕訪問。

要詳細了解 OAuth 2.0 授權請求流程,請查看 授權請求

授權類型有哪些?

基於角色的訪問控制及其運行情況

基於角色的訪問控制 (RBAC) 使用角色來管理訪問。每個用戶分配一個或多個預定義的角色,每個角色包含一組權限。RBAC 的關鍵在於理解主體(或用戶)、角色和權限之間的關係。

要理解基於角色的訪問控制(RBAC)如何運作,你需要了解到:

  1. 主體:這些可以是用戶或非人類實體,如 usermachine-to-machine application
  2. 角色:代表工作職能或責任。例如,admin member
  3. 權限:指定在特定資源上允許的操作,例如,讀取:order

RBAC-diagram.png

基於屬性的訪問控制及其運行情況

基於屬性的訪問控制 (ABAC) 廣泛應用於授權,通過使用實體的特定屬性來支持更複雜的場景,不僅僅是角色。

例如,一家公司管理一個全球文件共享平台,員工需要根據其工作角色、位置和文件的分類級別,在受控的環境下訪問敏感文件。

屬性可設計為以下方式:

  1. 用戶屬性: 角色(例如,“Manager”,“Engineer”),位置(例如,“US”,“Europe”)。
  2. 資源屬性: 文件類型(例如,“Financial Report”,“Design File”),分類級別(例如,“Confidential”)。
  3. 環境屬性: 訪問時間(例如,“工作時間內”),設備類型(例如,“公司筆電”)。

還有其他訪問控制模型,如基於政策的訪問控制 (PBAC)。每種模型各有優勢與劣勢,選擇哪種模型取決於你的使用場景和需求。

AuthZ 的應用案例和例子

B2C 軟體

B2C 軟體經常需要根據業務需求設置特定角色。例如,一個書店管理應用程序可能包含具有不同責任的角色,如管理資源和服務。

B2B 多租戶應用

B2B 應用通常使用多租戶架構,其中每個租戶代表一個組織。組織內需要像管理員和成員這樣的角色。在這裡,授權 (AuthZ) 在組織層面管理用戶中扮演重要角色,通常使用基於角色的訪問控制 (RBAC)。

機器對機器授權

機器對機器 通信直接發生在服務之間,無需人工交互。例如,調用 API 服務。它通常涉及令牌(例如,OAuth 2.0 訪問令牌)以確保安全、動態和細緻的訪問。

AuthZ 的最佳實踐是什麼?

以下是一些 授權 (authZ) 的最佳實踐,以確保安全且有效的訪問控制:

  • 最小特權原則

    這確保了未經授權的訪問或因帳戶泄露造成損害的風險最小化。用戶和系統應僅訪問其角色所需的資源和操作。

  • 採用基於令牌的授權

    基於令牌的訪問控制提供了更多的靈活性和精細的控制,同時遵循開放標準。使用安全令牌(例如,OAuth 2.0,JWTs)授予時間敏感和具體範圍的訪問。

  • 定期審核和監控

    定期審查訪問日誌和授權政策對於發現異常或過時的權限是必要的。

  • 進行職責分離

    首先實施細緻的權限,例如定義具體的操作和資源(例如,讀取、寫入、刪除)。創建角色時,使用明確的角色名稱,並強制執行職責分離,以最小化單一用戶作弊或犯錯的風險。

  • 支持多租戶(如適用)

    對於多租戶系統,租戶隔離是重要的。結合基於角色的訪問控制,可以實現數據資源的分離,確保適當的角色只能在其租戶內訪問資源。這防止了對其他租戶資源的偶然或惡意訪問。

  • 動態撤銷訪問

    設計 AuthZ 系統時,確保在條件變更時(如角色更新或雇用終止)可以立即更新或撤銷權限。這可以通過動態 API 檢查、webhook 或其他方法來實現。目標是實時防止未經授權的訪問。

AuthZ(授權)與 Auth(認證)之間有什麼區別?

認證和授權的區別在於它們在身份和訪問管理中的目的和過程。

AuthN(認證)回答問題:“你是誰以及你擁有哪個身份?”這是驗證用戶、服務或設備身份的過程。認證確保試圖訪問系統或資源的實體是真實的。常見方法包括密碼、生物識別和雙因素認證(2FA)。例如,當你使用電子郵件和密碼登入賬號時,系統通過認證確認你的身份。

AuthZ(授權)回答問題:“你被允許做什麼?”它是在用戶的權限或角色的基礎上授予或拒絕訪問資源的過程。授權在認證之後發生,決定了經過認證的用戶可以執行什麼操作。例如,登錄後,管理員用戶可能可以修改設定,而普通用戶只能查看它們。

總之,AuthN(認證)確認身份,而 AuthZ(授權)定義訪問。認證先發生,然後是授權,以確保資源的安全和適當使用。

使用 Logto 構建 AuthZ(授權)

Logto Cloud 提供基於開放標準協議(如 OIDC、OAuth 2.0 和 SAML)的關鍵授權服務。特徵包括基於角色的訪問控制組織(多租戶)自訂令牌聲明以滿足你從多個視角的授權需求。