令牌认证机制(token),相关各类JWT库(java)

简介: 令牌认证机制(token),相关各类JWT库(java)
+关注继续查看

JSON Web Tokens - jwt.io 网站中收录有各类语言的JWT库实现(有关JWT详细介绍请访问 JSON Web Token Introduction - jwt.io),

其中JAVA语言到目前(2018-06)有6个实现库,如下图:

b54eb194745e0c951be5bc35eccb66e.png

按顺序依次是

Auth0实现 的 java-jwt

Brian Campbell实现的 jose4j

connect2id实现的 nimbus-jose-jwt

Les Haziewood实现的 jjwt

Inversoft实现的prime-jwt

Vertx实现的vertx-auth-jwt.


以下是各个库的使用测试

  • java-jwt

460c4a61e26bc7be04d498af1e38e47.png

完整测试链接  https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Auth0JwtTest.java

点评:

Auth0提供的JWT库简单实用, 依赖第三方(如JAVA运行环境)提供的证书信息(keypair);

有一问题是在 生成id_token与 校验(verify)id_token时都需要 公钥(public key)与密钥(private key), 个人感觉是一不足(实际上在校验时只需要public key即可)


  • jose4j

e96eebe0db9bf882286bd806a9290e2.png

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Jose4JTest.java

点评:

jose4j提供了完整的JWT实现, 可以不依赖第三方提供的证书信息(keypair, 库本身自带有RSA的实现),类定义与JWT协议规定匹配度高,易理解与上手

对称加密与非对称加密都有提供实现

495eb7b7173a5d6f838e6d0b317d72c.png

  • nimbus-jose-jwt

45901e8f57c94273511d855fb3b3464.png

完整测试链接: MyOIDC/NimbusJoseJwtTest.java at 1.1.0 · monkeyk/MyOIDC · GitHub

点评:

nimbus-jose-jwt库类定义清晰,简单易用,易理解 , 依赖第三方提供的证书信息(keypair), 对称算法 与非对称算法皆有实现.

  • jjwt


9a2689da369bc42bcc751e91cb965ec.png

完整测试链接: MyOIDC/JJwtTest.java at 1.1.0 · monkeyk/MyOIDC · GitHub

点评:

jjwt小巧够用, 但对JWT的一些细节包装不够, 比如 Claims (只提供获取header,body)

  • prime-jwt


f12e6166ff2306349b1535864584a08.png

完整测试链接: MyOIDC/PrimeJwtTest.java at 1.1.0 · monkeyk/MyOIDC · GitHub

点评:

prime jwt库怎么说呢, 有些地方不符合JAVA语言规范, 支持对称算法(HMAC) 与非对称算法(RSA), 也算容易理解

  • vertx-auth-jwt

3196372ed17aad96efc7f0bfd9275e3.png

完整测试链接: MyOIDC/VertxAuthJwtTest.java at 1.1.0 · monkeyk/MyOIDC · GitHub

 点评:

Vertx Auth Jwt 库算是最不容易理解的一个库了.花了不少时间才弄通这一示例. 不容易上手. 并且生成与校验id_token 时都需要公钥与私钥,不足.

以下是在使用中的一些总结或注意点

1. 几乎所有库都要求JAVA版本1.7或更高版本, 1.6或以下的版本需要二次开发(或不支持)

2.从易用性, 扩展性, 完整性等来看, 使用首先推荐 jose4j, 其次是 Nimbus-jose-jwt.

3. JWT是实现OIDC的基石,掌握其使用对实现OIDC有很大帮助(同时对JAVA证书使用, PKI体系的掌握也有要求)

https://github.com/monkeyk/MyOIDC

目录
相关文章
|
13天前
|
机器学习/深度学习 Java 算法框架/工具
Java深度学习库DJL实现Python的NumPy
Java深度学习库DJL实现Python的NumPy
22 1
|
22天前
|
消息中间件 分布式计算 Java
大厂招聘重点全在这!GitHub置顶Java基础-高级面试库+自学路线
最近几年经常会听见这样一种声音:“程序员是吃青春饭的,年龄一大就不吃香了”,在当下这种互联网产业增速放缓,甚至隐约展现出疲态的时刻,此类言论就很有市场。 可能在其他领域中,程序员的发展前景不太乐观,但在Java这条赛道上,大家的前景还是很明朗的。入行Java也好几年了,我属于是半路出家,感觉做这一行很轻松,不会像以前做网络安全时那样感到焦虑与压力。 Java这一块,最看重的是技术与经验,只要是愿意学习勤钻研,在Java领域还是能吃得开。 至于收入方面,问了圈子里很多朋友,也结合我个人的实际情况,得出的结论是:平均每年能入60个左右,职位越高入得越多。这一行的高管几乎没有什么中年危
22 0
|
2月前
|
JSON 算法 Java
Java的jwt令牌原理
Java的jwt令牌原理
|
2月前
|
供应链 前端开发 JavaScript
Java开源进销存系统源码,支持手机APP扫码进出库
管店云主要应用于零售门店、商贸批发、生产工厂等行业领域,并可定制开发以满足各行各业的特定需求。管店云包括电脑端和手机APP端,APP支持扫码进出库,操作非常方便。
66 0
Java开源进销存系统源码,支持手机APP扫码进出库
|
3月前
|
Java 关系型数据库 MySQL
java自动创建库和创建表和插入记录
java自动创建库和创建表和插入记录
|
4月前
|
小程序 前端开发 Java
java如何利用JWT和注解,自定义参数的方式优雅实现小程序用户Id管理
在我们的开发项目中,经常需要用到用户ID,比如在小程序商城系统中,我们将商品加入购物车,这时前端就需要发送请求,携带上用户的ID。基本上很多种请求操作都需要携带用户ID,如果每个请求都需要我们往data中添加id的话,那样需要写很多重复代码,并且代码也不美观;所以我们可以利用JWT跟注解的方式来实现;
78 0
|
5月前
|
XML 存储 SQL
通过webgoat-xxe、jwt学习Java代码审计
通过webgoat-xxe、jwt学习Java代码审计
|
5月前
|
存储 JSON 安全
【应用安全】 使用Java创建和验证JWT
【应用安全】 使用Java创建和验证JWT
101 0
|
5月前
|
存储 安全 Java
Java元组实现库javatuples详解
元组可以看作是不同类型对象的有序集合。 这些对象不一定以任何方式相互关联,但它们共同具有某种意义。
287 0
|
6月前
|
JSON 算法 前端开发
Java几种常用 JSON 库性能比较,哪家最强?
Java几种常用 JSON 库性能比较,哪家最强?
相关产品
云迁移中心
推荐文章
更多