「PythonでJWTを扱いたい」
「JSONをURLセーフな文字列に変換したい」
このような場合には、PyJWTがオススメです。
この記事では、PyJWTについて解説しています。
本記事の内容
- PyJWTとは?
- PyJWTのシステム要件
- PyJWTのインストール
- PyJWTの動作確認
それでは、上記に沿って解説していきます。
PyJWTとは?
PyJWTは、JWTのエンコードとデコードを可能にするPythonライブラリです。
「セッション管理にJWTを使える」
「JWTはセッション管理に使うな」
このように、JWTに関しては意見が分かれています。
正直、調べれば調べるほど混乱してくる部分があります。
しかし、一旦セッション管理のことはおいておきましょう。
ここでは、JWTの次の特徴にフォーカスを当ててみます。
- URLセーフな文字列への変換
- 文字列の改ざん検知
どうでしょうか?
この特徴があるだけでも、JWTは使えると思いませんか?
これをセッション管理にまで使おうとするから、話がややこしくなります。
まずは、上記特徴を持ったJSONを扱えると考えればいいのです。
JSONデータを一段階レベルUPさせたモノが、JWTだと考えてみましょう。
そして、PyJWTによってPythonでJWTを扱うことが容易になります。
以上、PyJWTについて説明しました。
次は、PyJWTのシステム要件を確認します。
PyJWTのシステム要件
現時点(2021年12月)でのPyJWTの最新バージョンは、2.3.0となります。
この最新バージョンは、2021年10月17日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
PyJWTは、Pythonのみでコーディングされています。
そして、サポート対象となるPythonのバージョンは3.6以降となります。
しかし、Python 3.6はもう利用はやめるべきでしょう。
以下は、Python公式開発サイクルです。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
2021年でPython 3.6のサポート期限は終了となります。
依存関係の問題を避けたいなら、Python 3.7以降を利用しましょう。
まとめると、PyJWTはPythonのバージョンにのみ注意となります。
古くないPythonが動けば、基本的には問題はないと言えます。
以上、PyJWTのシステム要件を説明しました。
次は、PyJWTをインストールしていきましょう。
PyJWTのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.9.9
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 21.3.1 setuptools 59.6.0 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、PyJWTのインストールです。
PyJWTのインストールは、以下のコマンドとなります。
pip install pyjwt
インストールは、一瞬で終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
$ pip list Package Version ---------- ------- pip 21.3.1 PyJWT 2.3.0 setuptools 59.6.0 wheel 0.36.2
依存するパッケージは、存在しません。
そのことから、既存環境へ容易に導入できそうです。
以上、PyJWTのインストールを説明しました。
次は、PyJWTの動作確認を行います。
PyJWTの動作確認
エンコード、デコードをまとめて行います。
import jwt key = "secret" content = {} content["a"] = 12345 content["b"] = "abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde" encoded = jwt.encode(content, key, algorithm="HS256") print(encoded) result = jwt.decode(encoded, key, algorithms="HS256") print(result)
上記を実行した結果は、以下。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhIjoxMjM0NSwiYiI6ImFiY2RlYWJjZGVhYmNkZWFiY2RlYWJjZGVhYmNkZWFiY2RlYWJjZGVhYmNkZWFiY2RlIn0.VW6exeiP17l8gDsbKlD2nM8NbOZx25xW_xZfERKPbIA {'a': 12345, 'b': 'abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde'}
JSONが、URLセーフな文字列に変換されています。
個人的には、この動作だけでもPyJWTを使う価値があります。
以上、PyJWTの動作確認を説明しました。