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
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
- 见: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
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.8.3</version>
</dependency>
4、Nimbus-JOSE-JWT
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星。
转载:https://blog.csdn.net/chszs/article/details/103581054
查看评论