自訂存取權杖 (Custom access token)
Logto 提供在存取權杖(JWT / 不透明權杖 (Opaque token))中新增自訂宣告 (Claim) 的彈性。透過此功能,你可以在權杖中安全地傳遞業務邏輯所需的額外資訊,若為不透明權杖 (Opaque token) 則可透過內省 (introspection) 取得。
簡介
存取權杖 (Access tokens) 在驗證 (Authentication) 與授權 (Authorization) 流程中扮演關鍵角色,攜帶主體 (Subject) 的身分資訊與權限,並在 Logto 伺服器(作為驗證伺服器或身分提供者 (IdP))、你的 Web 服務伺服器(資源提供者)、以及用戶端應用程式(Client)之間傳遞。
權杖宣告 (Token claims) 是提供關於實體或權杖本身資訊的鍵值對。宣告可能包含使用者資訊、權杖到期時間、權限以及其他與驗證 (Authentication) 和授權 (Authorization) 流程相關的中繼資料。
Logto 中有兩種類型的存取權杖:
- JSON Web Token: JSON Web Token (JWT) 是一種流行的格式,能以安全且可由用戶端讀取的方式編碼宣告。常見宣告如
sub、iss、aud等,皆符合 OAuth 2.0 協議(詳見 此連結)。JWT 允許消費者直接存取宣告,無需額外驗證步驟。在 Logto 中,當 Client 發起特定資源或組織的授權請求時,預設會發放 JWT 格式的存取權杖。 - 不透明權杖 (Opaque token): 不透明權杖 (Opaque token) 並非自我描述,必須透過 權杖內省 (token introspection) 端點進行額外驗證。雖然格式不透明,但不透明權杖 (Opaque token) 仍可安全傳遞並取得宣告。權杖宣告會安全儲存在 Logto 伺服器,並由用戶端應用程式透過權杖內省端點存取。當授權請求未包含特定資源或組織時,會發放不透明格式的存取權杖。這類權杖主要用於存取 OIDC
userinfo端點及其他一般用途。
許多情境下,標準宣告無法滿足應用程式的特定需求,無論你使用的是 JWT 或不透明權杖 (Opaque token)。為此,Logto 提供在存取權杖中自訂宣告的彈性。透過此功能,你可以在權杖中安全地傳遞業務邏輯所需的額外資訊,若為不透明權杖 (Opaque token) 則可透過內省取得。
自訂權杖宣告如何運作?
Logto 允許你透過回呼函式 getCustomJwtClaims 將自訂宣告插入 存取權杖 (access token)。你可以實作 getCustomJwtClaims 函式,回傳自訂宣告物件。回傳值會與原始權杖內容合併並簽署,產生最終的存取權杖。
Logto 內建權杖宣告不可被覆蓋或修改。自訂宣告會以額外宣告形式加入權杖。若自訂宣告與內建宣告衝突,該自訂宣告將被忽略。
安全提醒:在自架部署中,自訂 JWT 腳本會以與 Logto 伺服器程序相同的權限執行,因此授予腳本編輯或測試權限等同於授予 Logto 主機的程式碼執行權限。此功能僅供受信任的管理員使用:請勿允許不受信任或低權限使用者建立、修改或測試這些腳本,也不要與他們共用管理主控台 (Admin Console)。
相關資源
使用 Logto 為 JWT 存取權杖新增自訂宣告,提升你的授權 (Authorization)