各类JWT库(java)的使用与评价

https://jwt.io/ 网站中收录有各类语言的JWT库实现(有关JWT详细介绍请访问 https://jwt.io/introduction/),

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

jwt

按顺序依次是

Auth0实现 的 java-jwt

Brian Campbell实现的 jose4j

connect2id实现的 nimbus-jose-jwt

Les Haziewood实现的 jjwt

Inversoft实现的prime-jwt

Vertx实现的vertx-auth-jwt.

 

以下是各个库的使用测试

java-jwt

oauth0

完整测试链接  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

jose4j

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

点评:

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

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

 

nimbus-jose-jwt

nimbus

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

点评:

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

 

jjwt

jjwt

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

点评:

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

 

prime-jwt

primejwt

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

点评:

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

 

vertx-auth-jwt

vertxjwt

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

 点评:

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

MyOIDC – 基于OIDC协议的开源项目

在之前的博客文章中, 曾不止一次介绍了OIDC协议及相关知识(详细访问: https://andaily.com/blog/?s=OIDC)

现在,开始一个新的开源项目: MyOIDC (https://git.oschina.net/mkk/MyOIDC), 将其相关的知识与实现给代码化,

我们将着重提供比OAuth2实现更好,更安全的认证与授权 安全框架实现.

 

顺便传播OIDC, 使用OIDC, 拥抱OIDC…

欢迎你的关注与支持…

 

https://git.oschina.net/mkk/MyOIDC

openid

spring-oauth-server 0.6 发布,OAuth2 与 Spring Security 安全应用整合

spring-oauth-server 0.6版本发布,该版本主要增加有缓存的支持, 具体的功能更新如下:

  • (150) – 修改OAUTH错误时返回JSON数据
  • (151) – 数据添加Ehcache缓存支持
  • (158) – 对配置,代码必要的地方添加注释,方便理解
  • 添加OIDC协议文档

OIDC是基于OAuth2的下一代身份认证授权协议,在0.6版本中添加了对OIDC1.0版本协议文档,同时在进行中文的翻译,具体请访问 https://andaily.com/blog/?p=440

spring-oauth-server 是一个整合OAuth2与Spring Security的安全应用项目,是从https://github.com/spring-projects/spring-security-oauth/tree/master/spring-security-oauth2扩展的符合实际项目需要的开源项目,可扩展为移动SSO解决方案.

0.6版本访问地址: http://git.oschina.net/shengzhao/spring-oauth-server/tree/0.6/

 

OIDC(OpenID-Connect) 1.0 协议中文版

OIDC(OpenID-Connect) 1.0协议的最终版本早已确认, 用自己的语言在进行翻译中(core部分),

OpenID Connect Core 1.0 incorporating errata set 1

 

截止2016-08-28的翻译进度(章节3.1.2.3)

中文版: https://monkeyk.com/oidc/Final_OpenID-Connect-Core-1.0-incorporating-errata-set-1_CN.html

英文原版: http://openid.net/specs/openid-connect-core-1_0.html

 

JSON Web Signature(JWS): https://tools.ietf.org/html/rfc7515

 

对应的开源项目地址: http://git.oschina.net/shengzhao/spring-oauth-server/tree/master/others/oidc?dir=1&filepath=others%2Foidc&oid=ec2b907c58efcb56a8c774e8f7868ab80c6cb69a&sha=25a0e1f2357768eadf3f0e3b8035959e3bbd3d66http://git.oschina.net/shengzhao/spring-oauth-server/tree/master/others/oidc?dir=1&filepath=others%2Foidc&oid=ec2b907c58efcb56a8c774e8f7868ab80c6cb69a&sha=25a0e1f2357768eadf3f0e3b8035959e3bbd3d66

持续更新中…

 

也可访问: http://www.cnblogs.com/linianhui/p/openid-connect-core.html

 

与OIDC相关介绍请访问: https://andaily.com/blog/?p=440

OIDC–基于OAuth2的下一代身份认证授权协议

OIDC(OpenID Connect), 下一代的身份认证授权协议; 当前发布版本1.0;

OIDC是基于OAuth2+OpenID整合的新的认证授权协议; OAuth2是一个授权(authorization)的开放协议, 在全世界得到广泛使用, 但在实际使用中,OAuth2只解决了授权问题, 没有实现认证部分,往往需要添加额外的API来实现认证; 而OpenID呢,是一个认证(authentication )的协议, 二者在实际使用过程中都有其局限性;

综合二者,即是OIDC; 通过OIDC,既能有OAUTH2的功能,也有OpenID的功能; 恰到好处…

OIDC将是替换(或升级)OAuth2, OpenID的不二选择..

OIDC在OAuth2的access_token的基础上增加了身份认证信息; 通过公钥私钥配合校验获取身份等其他信息—– 即idToken;

一个使用JWT生成的idToken(base64):

eyJhbGciOiJSUzI1NiIsImtpZCI6IjM3MTc2NjA0OTExODEyNzkwNzgifQ.eyJpc3MiOiIxMTExIiwiYXVkIjoiMTExMSIsImF0X2hhc2giOiI4ZjgxYThjOS1jNWJiLTQwOWMtYjI0Ni1lMzEyZmUwYzM4NWMiLCJyZWdpc3RyYXRpb24iOiIxMjM0NTY3OCIsImV4cCI6MTQ2MzYyMjA4NiwianRpIjoiRnl5aGZOYnQtU0NLR2tpTWRGMVg2dyIsImlhdCI6MTQ2MzU3ODg4NiwibmJmIjoxNDYzNTc4ODI2LCJzdWIiOiJsc3otb2lkYyJ9.hDCcs8PISdwUPp6Eyd-9JCeeTJ2ZtscBeuPITIt43gMYbddiUBLC90uT9bxKe6e3awHels3asEMreFtlnlY09PwdCxXvhjYcEiXO_dnzqu-zQXESHzPEE6d1WsZUcbj6yxoxMh0laba24uu3CbqSRQbOrsYmh2_XA5Q5eP66iOajRUDhNXhmsWEL85jtL9_h0SyfRNPZ9C0mRu2x9YZTHT129O53ggqtjwQxrXLAbCd1dd35DyIztagqQWDpo3gFG7YseNEiQ6Mf2D6nIBU9llAqH4sTThq_ahME06qKENat_sxnmIJN2UHw7u0E08S-59oxtOY9winT78Qj5IfWJw

 

在OIDC协议的实现中, 其底层是基于OAuth2. 一些常用的库如: JWT(https://jwt.io/), JWS; OAuth2的实现如: Spring Security OAuth, OLTU.

更多信息可参考: http://openid.net/connect/

OIDC 1.0协议: http://openid.net/specs/openid-connect-core-1_0.html

拥抱OIDC…

openid-r-logo-900x360