Java JWT开源库综述
- 2019.12.17日
一、简介
根据JWT官网的介绍,Java编程中可用的开源JWT库有:
- maven: com.auth0 / java-jwt / 3.3.0
- maven: org.bitbucket.b_c / jose4j / 0.6.3
- maven: com.nimbusds / nimbus-jose-jwt / 5.7
- maven: io.jsonwebtoken / jjwt / 0.9.0
- maven: io.fusionauth / fusionauth-jwt / 3.1.0
- 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
- 见:https://bitbucket.org/b_c/jose4j/wiki/Home
jose4j是一个遵循JWT和JOSE规范套件的开源实现,以Apache 2.0许可证发布。jose4j采用Java编写,完全依靠JCA API进行加密。
org.bitbucket.b_c
jose4j
0.7.0
2、jwtk/jjwt
- 见:https://github.com/jwtk/jjwt
- GitHub目前有5.8k星。
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
- 见:https://github.com/auth0/java-jwt
com.auth0
java-jwt
3.8.3
4、Nimbus-JOSE-JWT
- 见:https://bitbucket.org/connect2id/nimbus-jose-jwt/wiki/Home
5、FusionAuth/fusionauth-jwt
- 见:https://github.com/fusionauth/fusionauth-jwt
- GitHub目前才28星。
6、vert-x3/vertx-auth
- 见:https://github.com/vert-x3/vertx-auth
- GitHub目前才97星。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net