你知道你對 JSON Web Token 的認(rèn)識存在誤解嗎

1.前言

JSON Web Token (JWT) 其實目前已經(jīng)廣為軟件開發(fā)者所熟知了,但是 JOSE (Javascript Object Signing and Encryption) 卻鮮有人知道,我第一次知道它是在 Spring Security 的官方文檔中,它改變了我對 JWT 的一些認(rèn)識。目前國內(nèi)能找到相關(guān)中文資料不是太多。所以我覺得有必要歸納一下。

2. JOSE 概述

JOSE 是一種旨在提供在各方之間安全傳遞聲明(claims)的方法的規(guī)范集。我們常用的 JWT 就包含了允許客戶端訪問特定應(yīng)用下特定資源的聲明。JOSE 制定了一系列的規(guī)范來達(dá)到此目的。目前該規(guī)范還在不斷的發(fā)展,我們常用的包含以下幾個 RFC :

  • JWS(RFC 7515) -JSON Web簽名,描述生成和處理簽名消息
  • JWE(RFC 7516) -JSON Web加密,描述了保護和處理加密 消息
  • JWK(RFC 7517) -JSON Web密鑰,描述 Javascript 對象簽名和加密中加密密鑰的 格式和處理
  • JWA(RFC 7518) -JSON Web算法,描述了 Javascript 對象簽名和加密中使用的 加密 算法
  • JWT(RFC 7519) -JSON Web令牌,描述以 JSON 編碼并由 JWSJWE 保護的聲明的表示形式

3. 我們都看錯了 JWT

看了對 JWT 的描述中提到 “令牌以 JWS 或者 JWE 聲明表示”。莫非我之前的認(rèn)知是錯誤的嗎? 找了一些官方的資料研究了一番后,確實我之前的認(rèn)知是不夠全面的。

官方定義:

JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

直譯過來:JSON Web令牌(JWT)是一種緊湊的URL安全方法,用于表示要在兩方之間轉(zhuǎn)移的聲明。

也就是說我們通常說的 JWT 實際上是一個對聲明進行 JOSE 處理方式的統(tǒng)稱。我們之前用的應(yīng)該叫 JWS(JSON Web Signature),是 JWT 的一種實現(xiàn),除了 JWS , JWT 還有另一種實現(xiàn) JWE(JSON Web Encryption) 。它們之間的關(guān)系應(yīng)該是這樣的:

4. 什么是 JWE

JWS 我們就不說了,就是通常我們所說的 JWT。包括之前我在 Spring Security 實戰(zhàn)干貨 中所涉及到的 JWT 都是 JWS。我們來說一下 JWEJWS 僅僅是對聲明(claims)作了簽名,保證了其不被篡改,但是其 payload(中段負(fù)載) 信息是暴露的。也就是 JWS 僅僅能保證數(shù)據(jù)的完整性而不能保證數(shù)據(jù)不被泄露。所以我以前也說過它不適合傳遞敏感數(shù)據(jù)。
JWE 的出現(xiàn)就是為了解決這個問題的。具體的可以看下圖:

從上面可以看出 JWE 的生成非常繁瑣,作為 Token 可能比較消耗資源和耗時。用作安全的數(shù)據(jù)傳輸途徑應(yīng)該不錯。

5. Spring Security jose 相關(guān)

這里需要簡單提一下 Spring Security 提供了 JOSE 有關(guān)的類庫 spring-security-oauth2-jose ,你可以使用該類庫來使用 JOSE 。如果 Java 開發(fā)者要在 Spring Security 安全框架中使用 OAuth2.0 ,這個類庫也是需要研究一下的。

6. 總結(jié)

今天我們對 JOSE 這個相對陌生的概念進行了認(rèn)識,對 JOSE 規(guī)范集中的幾個重要的 RFC 進行了列舉。對之前的局限性認(rèn)識也進行了糾正。為我們后續(xù)的 OAuth2.0 相關(guān)學(xué)習(xí)進行了鋪墊。

關(guān)注公眾號:碼農(nóng)小胖哥,獲取更多資訊

個人博客:https://felord.cn

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容