PythonでJWT(JSON Web Token)を使う方法

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を活用する方法は多々ありますので、是非この知識を活かしてください。

コメント

コメントする

目次