常見使用情境 (Common use cases)
本節將舉例說明 自訂存取權杖 (Access token) 宣告 (Claims) 在某些情境下的應用,提供你參考。當你遇到存取管理上的困難時,可以評估自訂存取權杖 (Access 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早於公測階段結束時間。
若沒有自訂權杖 (Token) 宣告 (Claims) 功能,當驗證 授權 (Authorization) 權限時,必須呼叫 Logto Management API 來查詢目前存取權杖 (Access token) 所屬使用者是否擁有某 API 資源所需角色的權限。
類似情境下,假設你的應用程式希望在登入頁面顯示生日祝福給即將生日的使用者,也可以利用自訂權杖 (Token) 宣告 (Claims) 在 權杖 (Token) 載荷 中加入生日欄位,據此決定是否顯示特定訊息。
手動阻擋權杖 (Token) 發放
假設 Joe 經營一款線上遊戲,並以 Logto 作為 身分與存取管理 (IAM, Identity and Access Management) 系統。
假設該遊戲需儲值購買遊戲時數,Joe 會在遊戲服務中記錄每位玩家的餘額,並隨著遊戲時間累積持續扣款。Joe 希望當帳戶餘額歸零時,強制玩家登出以促使儲值。
此時,Joe 也能利用 Logto 提供的自訂權杖 (Token) 宣告 (Claims) 功能來實現:
- 在腳本中,可透過外部 API 呼叫 取得外部資料,查詢玩家在 Joe 遊戲伺服器上的當前餘額。
- 若餘額小於或等於 0,則可呼叫
api.denyAccess()方法,阻擋權杖 (Token) 發放。
此時,由於無法取得新的有效存取權杖 (Access token),玩家將被強制登出遊戲。