Java JWT開源庫綜述

Java JWT開源庫綜述

  • 2019.12.17日

一、簡介

根據JWT官網的介紹,Java編程中可用的開源JWT庫有:

  1. maven: com.auth0 / java-jwt / 3.3.0
  2. maven: org.bitbucket.b_c / jose4j / 0.6.3
  3. maven: com.nimbusds / nimbus-jose-jwt / 5.7
  4. maven: io.jsonwebtoken / jjwt / 0.9.0
  5. maven: io.fusionauth / fusionauth-jwt / 3.1.0
  6. maven: io.vertx / vertx-auth-jwt / 3.5.1

六種庫的特性對比表

JWT特性 java-jwt jose4j nimbus-jose-jwt jjwt fusionauth-jwt vertx-auth-jwt
簽名
驗證
iss 檢查
sub 檢查 X
aud 檢查
exp 檢查
nbf 檢查 X
iat 檢查 X
jti 檢查 X X
HS256算法
HS384算法
HS512算法
RS256算法
RS384算法
RS512算法
ES256算法
ES384算法
ES512算法
PS256算法 X X ?
PS384算法 X X ?
PS512算法 X X ?
EdDSA算法 ? ? ? ? ? ?

綜上可見,完整實現了JWT特性的開源庫只有jose4j和jjwt兩個庫。儘管在普通項目中以上六個庫皆可用,但遇到某些特殊需求的場景,就可能需要更換庫。有鑑於此,應優先選擇jose4j和jjwt兩個庫。

二、開源庫分析

1、jose4j

jose4j是一個遵循JWT和JOSE規範套件的開源實現,以Apache 2.0許可證發佈。jose4j採用Java編寫,完全依靠JCA API進行加密。

  <dependency>
    <groupId>org.bitbucket.b_c</groupId>
    <artifactId>jose4j</artifactId>
    <version>0.7.0</version>
  </dependency>

2、jwtk/jjwt

JJWT旨在成爲最易於使用和理解的庫,用於在JVM和Android上創建和驗證JWT令牌。

JJWT是基於JWT、JWS、JWE、JWK和JWA的RFC規範的純Java的開源實現,以Apache 2.0許可證發佈。

JJWT庫由Okta的資深架構師Les Hazlewood創建,並由GitHub貢獻者社區提供支持和維護。

另外,JJWT還額外添加了一些不屬於該規範的便利擴展,例如JWS壓縮和聲明的執行。

JJWT的特徵

  • 所有JDK和Android上的全功能實現
  • 自動化的安全最佳實踐和斷言
  • 易於學習,API易讀
  • 方便易讀的、流暢的接口,支持IDE的代碼自動完成功能
  • RFC規範的完全兼容,並通過RFC-specified測試向量的測試
  • 穩定的實現,執行測試代碼覆蓋率100%。
  • 創建、解析和驗證緊湊型JWT(compact JWTs,又名JWSs)的數字簽名,支持所有標準JWS算法
  • 額外的增強功能:
    • 對較大的JWT的Body壓縮,不僅是JWEs
    • 聲明斷言(需要特定的值)
    • 聲明POJO的編組(marshaling)和解組(unmarshaling)
    • 基於期望的JWA算法生成安全密鑰
    • 更多…

目前不支持的特性

  • 非緊湊型JWT的序列化和解析
  • JWE (Encryption for JWT)

這兩個特性會在後續的版本中實現。

3、auth0/java-jwt

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.8.3</version>
</dependency>

4、Nimbus-JOSE-JWT

5、FusionAuth/fusionauth-jwt

6、vert-x3/vertx-auth

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章