【搬運工】 出處:http://andaily.com/blog/?p=956java
在 https://jwt.io/ 網站中收錄有各種語言的JWT庫實現(有關JWT詳細介紹請訪問 https://jwt.io/introduction/),git
其中JAVA語言到目前(2018-06)有6個實現庫,以下圖:github
按順序依次是算法
Auth0實現 的 java-jwt測試
Brian Campbell實現的 jose4j網站
connect2id實現的 nimbus-jose-jwt加密
Les Haziewood實現的 jjwtserver
Inversoft實現的prime-jwtjwt
Vertx實現的vertx-auth-jwt.blog
如下是各個庫的使用測試
java-jwt
點評:
Auth0提供的JWT庫簡單實用, 依賴第三方(如JAVA運行環境)提供的證書信息(keypair);
有一問題是在 生成id_token與 校驗(verify)id_token時都須要 公鑰(public key)與密鑰(private key), 我的感受是一不足(實際上在校驗時只須要public key便可)
jose4j
點評:
jose4j提供了完整的JWT實現, 能夠不依賴第三方提供的證書信息(keypair, 庫自己自帶有RSA的實現),類定義與JWT協議規定匹配度高,易理解與上手
對稱加密與非對稱加密都有提供實現
nimbus-jose-jwt
點評:
nimbus-jose-jwt庫類定義清晰,簡單易用,易理解 , 依賴第三方提供的證書信息(keypair), 對稱算法 與非對稱算法皆有實現.
jjwt
點評:
jjwt小巧夠用, 但對JWT的一些細節包裝不夠, 好比 Claims (只提供獲取header,body)
prime-jwt
點評:
prime jwt庫怎麼說呢, 有些地方不符合JAVA語言規範, 支持對稱算法(HMAC) 與非對稱算法(RSA), 也算容易理解
vertx-auth-jwt
點評:
Vertx Auth Jwt 庫算是最不容易理解的一個庫了.花了很多時間才弄通這一示例. 不容易上手. 而且生成與校驗id_token 時都須要公鑰與私鑰,不足.
———————————————————
如下是在使用中的一些總結或注意點
1. 幾乎全部庫都要求JAVA版本1.7或更高版本, 1.6或如下的版本須要二次開發(或不支持)
2.從易用性, 擴展性, 完整性等來看, 使用首先推薦 jose4j, 其次是 Nimbus-jose-jwt.
3. JWT是實現OIDC的基石,掌握其使用對實現OIDC有很大幫助(同時對JAVA證書使用, PKI體系的掌握也有要求)