常見使用案例
在本節中,我們將提供一些範例,幫助你理解 自訂權杖宣告 在某些情境下的應用,為你提供一些參考。這樣,當你在存取管理上遇到困難時,可以評估自訂權杖宣告是否能為你帶來便利。
使屬性型存取控制 (ABAC) 成為可能
屬性型存取控制 (ABAC, Attribute-based access control) 是一種使用屬性(例如使用者角色、資源屬性和環境條件)來做出存取控制決策的存取控制模型。這是一種靈活且動態的方式來管理對受保護資源的存取。
假設你正在開發一個應用程式,該應用程式的發佈分為兩個階段:公開測試版和正式上線。即使在應用程式正式上線後,你仍希望參加過公開測試版的老用戶能繼續使用付費功能。
在應用程式正式上線後,你可以使用 Logto 的 角色型存取控制 (RBAC) 功能來實現付費功能的存取控制。為了方便檢查某個使用者是否在公開測試階段就已經使用該應用程式,你可以使用 getCustomJwtClaims()
方法在權杖的 payload 中新增一個宣告 createdAt
。
然後,在你的受保護 API 中進行存取控制時,你需要允許符合以下任一條件的存取權杖:
- 在 RBAC 上下文中,具有存取付費資源的權限範圍。
createdAt
早於公開測試階段的結束時間。
如果沒有自訂權杖宣告功能,在驗證 受保護 API 資源 的權限時,需要調用 Logto Management API 來檢查當前存取權杖的使用者是否具有某個 API 資源所需角色對應的權限。
在類似的情境中,假設你的應用程式在登入頁面上顯示生日祝福,如果使用者的生日即將到來。你可以使用自訂權杖宣告在 權杖 payload 中新增一個生日欄位,這可以用來決定是否顯示特定訊息。
手動阻止權杖發行
假設 Joe 正在運營一款線上遊戲,並使用 Logto 作為 身分與存取管理 (IAM, Identity and Access Management) 系統。
假設這款遊戲需要充值以購買遊戲時間。Joe 在他的遊戲服務中記錄每個使用者的餘額,並隨著遊戲時間的累積不斷扣減餘額。Joe 希望在帳戶餘額耗盡時強制玩家登出,以鼓勵他們充值。
此時,Joe 也可以使用 Logto 提供的自訂權杖宣告功能來實現這一點:
- 在腳本中,可以通過外部 API 調用 獲取外部數據 從 Joe 的遊戲伺服器中檢索當前玩家的餘額。
- 如果餘額小於或等於 0,可以使用
api.denyAccess()
方法來阻止權杖發行。
此時,由於無法獲得新的有效存取權杖,玩家將被強制登出遊戲。