根据JWT官网的介绍,Java编程中可用的开源JWT库有:
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两个库。
jose4j是一个遵循JWT和JOSE规范套件的开源实现,以Apache 2.0许可证发布。jose4j采用Java编写,完全依靠JCA API进行加密。
<dependency>
<groupId>org.bitbucket.b_cgroupId>
<artifactId>jose4jartifactId>
<version>0.7.0version>
dependency>
JJWT旨在成为最易于使用和理解的库,用于在JVM和Android上创建和验证JWT令牌。
JJWT是基于JWT、JWS、JWE、JWK和JWA的RFC规范的纯Java的开源实现,以Apache 2.0许可证发布。
JJWT库由Okta的资深架构师Les Hazlewood创建,并由GitHub贡献者社区提供支持和维护。
另外,JJWT还额外添加了一些不属于该规范的便利扩展,例如JWS压缩和声明的执行。
这两个特性会在后续的版本中实现。
<dependency>
<groupId>com.auth0groupId>
<artifactId>java-jwtartifactId>
<version>3.8.3version>
dependency>