Java JWT开源库综述

Posted chszs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-jwtjose4jnimbus-jose-jwtjjwtfusionauth-jwtvertx-auth-jwt
签名
验证
iss 检查
sub 检查X
aud 检查
exp 检查
nbf 检查X
iat 检查X
jti 检查XX
HS256算法
HS384算法
HS512算法
RS256算法
RS384算法
RS512算法
ES256算法
ES384算法
ES512算法
PS256算法XX?
PS384算法XX?
PS512算法XX?
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

以上是关于Java JWT开源库综述的主要内容,如果未能解决你的问题,请参考以下文章

用于以JWE JSON序列化格式解析JWT令牌的Java库

紧凑的神经网络模型设计研究综述

.NET 紧凑框架的 GPS 库

我的开源库正在稳定。现在如何引起注意? [关闭]

JWT应用

JAVA实现JWT