PythonでJSON Web Token(JWT)を扱うためには、pyjwt
というライブラリを使用します。このライブラリをインストールするには、以下のコマンドを実行します。
pip install pyjwt
JWTはAPI認証やアクセス制御などで用いられる規格の一つで、公開鍵暗号に基づくメッセージ認証コードにより改ざんやなりすましを防ぐことができます。JWTはヘッダー、ペイロード、署名(シグネチャ)の3つの要素からなり、それぞれが.
で区切られています。
以下に、JWTの作成と検証の基本的なコードを示します。
import json
from datetime import datetime, timedelta, timezone
from jwt import (JWT, jwk_from_dict, jwk_from_pem)
from jwt.utils import get_int_from_datetime
instance = JWT()
message = {
'iss': 'https://example.com/',
'sub': 'yosida95',
'iat': get_int_from_datetime(datetime.now(timezone.utc)),
'exp': get_int_from_datetime(datetime.now(timezone.utc) + timedelta(hours=1)),
}
# Load a RSA key from a JWK dict.
signing_key = jwk_from_dict({
'kty': 'RSA',
'e': 'AQAB',
'n': '...',
'd': '...'
})
# Encode the message to JWT(JWS).
compact_jws = instance.encode(message, signing_key, alg='RS256')
# Load a public key from PEM file corresponding to the signing private key.
with open('rsa_public_key.json', 'r') as fh:
verifying_key = jwk_from_dict(json.load(fh))
# Decode the JWT with verifying the signature.
message_received = instance.decode(compact_jws, verifying_key, do_time_check=True)
# Successfuly retrieved the `message` from the `compact_jws`
assert message == message_received
このコードでは、まずJWTのインスタンスを作成し、メッセージ(ペイロード)を定義しています。次に、JWK辞書からRSAキーをロードし、そのキーを使用してメッセージをJWTにエンコードします。最後に、署名の検証とともにJWTをデコードし、元のメッセージが正常に取得できることを確認しています。
以上がPythonでJWTを扱う基本的な方法です。詳細な情報や実装例については、公式ドキュメンテーションや関連記事を参照してください。