PythonでのJWT(JSON Web Token)の使用方法について解説します。この記事ではJWTの基本的な仕組みから、Pythonでの具体的なコード例、その解説、さらには応用例までを網羅しています。
目次
JWT(JSON Web Token)とは
JWTはJSONを使用してクレーム(claim)を表現するトークンの仕様です。主に認証や情報の交換に用いられます。
JWTの構造
JWTは以下の3つの部分から構成されます。
- Header(ヘッダー)
- Payload(ペイロード)
- Signature(シグネチャ)
これらはBase64でエンコードされ、ピリオドで連結されます。
PythonでJWTを使用する
Pythonでは`PyJWT`というライブラリを使ってJWTを操作することができます。
PyJWTのインストール
PyJWTはpipで簡単にインストールできます。
pip install PyJWT
基本的な使用方法
以下のコードはJWTの生成と検証の基本的な例です。
import jwt
# JWTを生成
key = "secret"
payload = {"user": "test_user"}
encoded = jwt.encode(payload, key, algorithm="HS256")
# JWTを検証
decoded = jwt.decode(encoded, key, algorithms="HS256")
print(decoded)
このコードでは、`jwt.encode`関数でJWTを生成し、`jwt.decode`関数でJWTを検証しています。
コード解説
- jwt.encode: ペイロードとシークレットキー、暗号アルゴリズムを指定してJWTを生成します。
- jwt.decode: 生成されたJWTとシークレットキー、暗号アルゴリズムを指定してJWTを検証します。
応用例
より実用的な使用例として以下の2つを紹介します。
期限付きJWTの生成
JWTに有効期限を設定する例です。
import jwt
import datetime
key = "secret"
payload = {"user": "test_user", "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30)}
encoded = jwt.encode(payload, key, algorithm="HS256")
`datetime.timedelta`で有効期限を30秒後に設定しています。
複数のクレームを持つJWT
より多くの情報を持たせたJWTの生成例です。
import jwt
key = "secret"
payload = {"user": "test_user", "role": "admin", "email": "test@example.com"}
encoded = jwt.encode(payload, key, algorithm="HS256")
`role`や`email`といった追加のクレームをペイロードに含めています。
まとめ
PythonでのJWTの使用方法を基本から応用まで解説しました。特に`PyJWT`ライブラリを用いることで、簡単にJWTの生成と検証ができることがわかりました。認証や情報交換の場でJWTを活用する方法は多々ありますので、是非この知識を活かしてください。
コメント