Python:JOSE・JWTライブラリを列挙する.
はじめに
-
2024年10月19日現在,使用可能なJOSE・JWTのpythonライブラリを調べてみました.
-
動機・目的
-
pythonでpem形式の証明書からjwksを生成するプロフラムを実装したく,使えそうなライブラリを探したかった.
-
元々PyJWTを利用しており,他にも同等のライブラリがあるのかどうか気になった.
-
※スター数が少なく人気がなさそうなライブラリは,省いています
PyJWT
- JWTのエンコード・デコード機能が実装されている.URLを引数として,jwk(s)を取り出す
JWKClient
クラスが実装している. - ドキュメント(簡単な例があってみやすい)
- GitHub(スター数:約5100)
JWCrypto
- JWK,JWS,JWE,JWTの仕様を実装している.
- ドキュメント(字が多くてちょっと見にくい.けど,メソッド名や引数,返り値等の記載が盛り込まれており,情報量が多い)
- JWTの署名生成および検証時に使う鍵は,同ライブラリのJWKクラスのインスタンスであり,相互性関連性が強い.
- GitHub(スター数:435)
- OpenWallet Foundationと呼ばれる組織が実装しているsd(Selective Disclosure:選択的開示機能)-jwtには,このライブラリが使用されている.
python-jose
- JOSEの仕様を実装している.
- 最初に挙げたPyJWTがベースになっているっぽい
This library was originally based heavily on the work of the folks over at PyJWT.
- ドキュメント(情報量が少ない)
- JWCryptoと後述のAuthlibには実装されてるthumbprint(jwkのハッシュ値. jwkの
kid
としても設定できる)生成のメソッドがない.
issueでthumbprint実装して欲しい旨の投稿があるものの、未実装.
- GitHub(スター数:約1500)
Authlib
-
JWS, JWK, JWA, JWTの他に,OAuthやOpenID Connect関連のクラス・メソッドが用意されている.
This project is inspired by:
OAuthLib
Flask-OAuthlib
requests-oauthlib
pyjwt
-
JWTの署名検証を行う際,検証鍵(公開鍵)はpem形式のデータを想定しており,同ライブラリのJWKインスタンスを使用できない.
-
ドキュメント(見やすい.)
- GitHub(スター数:約4500)
コメント
-
pem形式の公開鍵データからjson形式のjwkファイルを生成したり,jwkのjsonファイルを用いて対象のJWTを検証する機能や実装が必要な場合,メソッドが豊富な
JWCrypto
のほうを使った方がいいだろう.JWCrypto
のjwkクラスは,pem形式のデータからjwkインスタンスを生成したり,jsonデータをエクスポートできたりする.また,JWTの検証もAuthlibとは異なり,jwkクラスのインスタンスをそのまま使用できる(pem形式のデータに直したりする必要がない) -
逆に,ここで列挙した
JWCrypto
以外のライブラリを使う場合,前者(pem⇨json型jwk生成)か後者(jwkのjsonファイルを用いて,jwtの署名検証)どちらかの処理に関して,自作でなにかしらの手順を行うコードの作成が必要となる.- 例:Authlib:
jwk.json
からpem形式の公開鍵データを生成する手順がないと,jwtの検証に移ることができない.
- 例:Authlib:
Discussion