【搬運工】 出處:http://andaily.com/blog/?p=956
在 https://jwt.io/ 網站中收錄有各類語言的JWT庫實現(有關JWT詳細介紹請訪問 https://jwt.io/introduction/),
其中JAVA語言到目前(2018-06)有6個實現庫,如下圖:
按順序依次是
Auth0實現 的 java-jwt
Brian Campbell實現的 jose4j
connect2id實現的 nimbus-jose-jwt
Les Haziewood實現的 jjwt
Inversoft實現的prime-jwt
Vertx實現的vertx-auth-jwt.
以下是各個庫的使用測試
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體系的掌握也有要求)