跳至主要內容

常見使用情境 (Common use cases)

本節將舉例說明 自訂權杖宣告 (custom token claims) 在某些場景下的應用,提供你參考。當你在存取管理上遇到困難時,可以評估自訂權杖宣告是否能帶來便利。

實現屬性型存取控制 (ABAC, Attribute-based access control)

屬性型存取控制 (ABAC, Attribute-based access control) 是一種以屬性(如使用者角色、資源屬性、環境條件等)做為存取決策依據的存取控制模型。這是一種靈活且動態的受保護資源存取管理方式。

假設你正在開發一款應用程式,並將其發佈分為公測與正式上線兩個階段。即使應用程式正式上線後,你仍希望參與過公測的老用戶能繼續使用付費功能。

在應用程式正式上線後,你可利用 Logto 的 角色型存取控制 (RBAC, Role-based access control) 功能,實現付費功能的存取控制。為了方便判斷某使用者是否在公測階段就已經開始使用,你可以透過 getCustomJwtClaims() 方法,在權杖 (token) 載荷中加入 createdAt 宣告 (claim)。

接著,在受保護 API 進行存取控制時,你只需允許符合下列任一條件的存取權杖 (access token) 通過:

  1. 具備 RBAC 權限範圍 (scope),可存取付費資源。
  2. 權杖中的 createdAt 早於公測結束時間。

若沒有自訂權杖宣告功能,當你在驗證 授權 (Authorization) 權限時,就必須呼叫 Logto Management API,查詢當前 access token 對應的使用者是否擁有某 API 資源所需角色的權限。

類似情境下,假設你的應用程式希望在登入頁面顯示生日祝福,當使用者生日將近時。你可以利用自訂權杖宣告,在 權杖載荷 (token payload) 中加入生日欄位,據此判斷是否顯示特定訊息。

手動阻擋權杖發放

假設 Joe 經營一款線上遊戲,並以 Logto 作為 身分與存取管理 (IAM, Identity and Access Management) 系統。

這款遊戲需儲值購買遊戲時間。Joe 會在遊戲服務中記錄每位玩家的餘額,並隨著遊戲時間消耗持續扣款。Joe 希望當玩家餘額歸零時,強制玩家登出,以鼓勵儲值。

這時,Joe 也可以利用 Logto 提供的自訂權杖宣告功能來實現:

  1. 在腳本中,可透過外部 API 呼叫 擷取外部資料,查詢玩家在 Joe 遊戲伺服器上的當前餘額。
  2. 若餘額小於等於 0,則可呼叫 api.denyAccess() 方法,阻擋權杖發放。

此時,由於無法取得新的有效 access token,玩家將被強制登出遊戲。