常見使用情境 (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) 通過:
- 具備 RBAC 權限範圍 (scope),可存取付費資源。
- 權杖中的
createdAt
早於公測結束時間。
若沒有自訂權杖宣告功能,當你在驗證 授權 (Authorization) 權限時,就必須呼叫 Logto Management API,查詢當前 access token 對應的使用者是否擁有某 API 資源所需角色的權限。
類似情境下,假設你的應用程式希望在登入頁面顯示生日祝福,當使用者生日將近時。你可以利用自訂權杖宣告,在 權杖載荷 (token payload) 中加入生日欄位,據此判斷是否顯示特定訊息。
手動阻擋權杖發放
假設 Joe 經營一款線上遊戲,並以 Logto 作為 身分與存取管理 (IAM, Identity and Access Management) 系統。
這款遊戲需儲值購買遊戲時間。Joe 會在遊戲服務中記錄每位玩家的餘額,並隨著遊戲時間消耗持續扣款。Joe 希望當玩家餘額歸零時,強制玩家登出,以鼓勵儲值。
這時,Joe 也可以利用 Logto 提供的自訂權杖宣告功能來實現:
- 在腳本中,可透過外部 API 呼叫 擷取外部資料,查詢玩家在 Joe 遊戲伺服器上的當前餘額。
- 若餘額小於等於 0,則可呼叫
api.denyAccess()
方法,阻擋權杖發放。
此時,由於無法取得新的有效 access token,玩家將被強制登出遊戲。