簡體   English   中英

JWT Keycloak 令牌中是否有任何部分可以用作令牌本身的唯一 ID?

[英]Is there any part of JWT Keycloak token which can be used as a unique ID of the token itself?

編輯

我之前的問題是關於 Keycloak 令牌,但我發現的解決方案更通用,它適用於 JWT,無論 Keycloak 是什么。

背景/動機

基於 JWT Keycloak 令牌,我從我的數據庫中獲取了用戶的一些附加信息( sub字段)。 我想緩存這些信息,我正在尋找一個合適的緩存鍵。

我不想使用sub字段,因為我希望緩存條目在 Keycloak 令牌更改時失效(= 為同一用戶生成新令牌時)。

我可以輕松地使用整個 Keycloak 令牌或其第三部分(簽名)作為密鑰。 但是,它是一個相當長的字符串。

問題

JWT Keycloak 令牌中是否有任何字段可以用作此特定令牌的唯一 ID? 保證始終存在,並且始終針對令牌的新實例進行更改。

sid字段是這樣工作的嗎? 至少它似乎與sub不同。

Keycloak 令牌中有幾個 UUID,我對文檔感到困惑。 我發現只有這張清晰排列的表格解釋了 Keycloak 令牌字段的含義。

根據您的用例,我可以想到使用的兩個字段是id / email id和過期。

  1. Id / email id 是唯一的並且始終存在,因此可以滿足您的目的。

  2. 不能單獨使用過期時間,因為同時為 2 個用戶生成的 2 個令牌可能具有相同的過期時間。 那我為什么要使用? 如果您的緩存不支持 TTL,那么可能會有一些過時的條目不必要地占用您的緩存。 因此,如果您將密鑰保留為“expiration.id”,那么您可以每 24 小時左右運行一次輔助作業,以根據第一部分(即過期)從緩存中刪除過時的條目。

這是我的 Java 應用程序中的示例 Keycloak 令牌 object:

在此處輸入圖像描述

最后我找到了JWT的詳細文檔: https://datatracker.ietf.org/doc/html/rfc7519

該字段不是特定於 keycloak 的,它在 JWT 標准中定義。

字段jti指定為:

jti (JWT ID)聲明為 JWT 提供唯一標識符。 標識符值的分配方式必須確保同一值被意外分配給不同數據 object 的概率可以忽略不計; 如果應用程序使用多個發行者,則必須防止不同發行者產生的值之間的沖突。 jti聲明可用於防止重播 JWT。 jti值是區分大小寫的字符串。 使用此聲明是可選的。

該字段完全符合我“提供此特定令牌的唯一 ID”的要求。 我們的 keycloak 服務器似乎為該字段分配了一個 UUID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM