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

猜你喜欢

转载自blog.csdn.net/chszs/article/details/103581054