【Python】JWT生成が可能なPyJWTのインストール

【Python】JWT生成が可能なPyJWTのインストール プログラミング

「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.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年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の動作確認を説明しました。

タイトルとURLをコピーしました