🔑

Python:JOSE・JWTライブラリを列挙する.

2024/10/17に公開

はじめに

  • 2024年10月19日現在,使用可能なJOSE・JWTのpythonライブラリを調べてみました.

  • 動機・目的

    • pythonでpem形式の証明書からjwksを生成するプロフラムを実装したく,使えそうなライブラリを探したかった.

    • 元々PyJWTを利用しており,他にも同等のライブラリがあるのかどうか気になった.

※スター数が少なく人気がなさそうなライブラリは,省いています

PyJWT

  • JWTのエンコード・デコード機能が実装されている.URLを引数として,jwk(s)を取り出すJWKClientクラスが実装している.
  • ドキュメント(簡単な例があってみやすい)

https://pyjwt.readthedocs.io/en/stable/#

  • GitHub(スター数:約5100)

https://github.com/jpadilla/pyjwt?tab=readme-ov-file

JWCrypto

  • JWK,JWS,JWE,JWTの仕様を実装している.
  • ドキュメント(字が多くてちょっと見にくい.けど,メソッド名や引数,返り値等の記載が盛り込まれており,情報量が多い)

https://jwcrypto.readthedocs.io/en/latest/index.html

  • JWTの署名生成および検証時に使う鍵は,同ライブラリのJWKクラスのインスタンスであり,相互性関連性が強い.

https://jwcrypto.readthedocs.io/en/latest/jwt.html#examples

  • GitHub(スター数:435)

https://github.com/latchset/jwcrypto

  • OpenWallet Foundationと呼ばれる組織が実装しているsd(Selective Disclosure:選択的開示機能)-jwtには,このライブラリが使用されている.

https://github.com/openwallet-foundation-labs/sd-jwt-python/blob/main/src/sd_jwt/issuer.py

python-jose

This library was originally based heavily on the work of the folks over at PyJWT.

  • ドキュメント(情報量が少ない)

https://python-jose.readthedocs.io/en/latest/

  • JWCryptoと後述のAuthlibには実装されてるthumbprint(jwkのハッシュ値. jwkのkidとしても設定できる)生成のメソッドがない.

issueでthumbprint実装して欲しい旨の投稿があるものの、未実装.

https://github.com/mpdavis/python-jose/issues/276

  • GitHub(スター数:約1500)

https://github.com/mpdavis/python-jose

Authlib

This project is inspired by:
OAuthLib
Flask-OAuthlib
requests-oauthlib
pyjwt

  • JWTの署名検証を行う際,検証鍵(公開鍵)はpem形式のデータまたはjsonのjwk(s)を想定している. 同ライブラリのJWKインスタンスを使った署名検証の例は,ドキュメントに記載されてない.

https://docs.authlib.org/en/latest/jose/jwt.html#use-dynamic-keys

  • ドキュメント(見やすい.)

https://docs.authlib.org/en/latest/

  • GitHub(スター数:約4500)

https://github.com/lepture/authlib

Discussion