PythonでPyJWTを使用し、JSON Web Token(JWT)を作成する

PythonでPyJWTを使用し、JSON Web Token(JWT)を作成してみます。

そもそも、JSON Web Token(JWT)とは何なのか。Webを介して、2者の間で、情報を安全に転送するために使用されるJSONオブジェクトです。認証システムや情報交換に用いられています。転送される情報は、デジタル署名されているため、信頼することができます。Token自体は主にヘッダー、ペイロード、署名で構成されています。これらの3つの部分はドット”.”で区切られています。

また、JSON Web Token(JWT)は、ある者から別の者に送信する情報の構造を定義し、「シリアル化」と「デシリアライズ」の2つの形式が存在する。シリアル化は、主に、リクエストとレスポンスごとにネットワークを通じてデータを転送するために使用される。一方、デシリアライズされたアプローチは、Web Tokenへのデータの読み書きに使用される。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■PyJWTをインストールする

今回は、PythonでJSON Web Token(JWT)の実装ができるライブラリ「PyJWT」を使用します。PyJWTはPythonの標準ライブラリではありませんので、事前にインストールが必要なので、インストールしていきます。

PyJWTをインストールするために、今回はpipを経由してインストールを行うので、まずWindowsのコマンドプロンプトを起動します。

pip install PyJWT

起動後、上記のコマンドを入力し、Enterキーを押します。

なお、今回は、pythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。

py -3.8 -m pip install PyJWT

切り替えるために、上記のコマンドを入力し、Enterキーを押します。

Defaulting to user installation because normal site-packages is not writeable
Collecting PyJWT
Downloading PyJWT-2.1.0-py3-none-any.whl (16 kB)
Installing collected packages: PyJWT
Successfully installed PyJWT-2.1.0

Enterキーを押すと、インストールが開始され、上記のように「Successfully installed」と表示されます。これが表示されれば、PyJWTが正常にインストールされたことになります。

なお、今回はPyJWTのバージョン2.1.0をインストールしました。

■PyJWTを使用し、JSON Web Token(JWT)を作成する

インストールが完了しましたので、PyJWTを使用し、JSON Web Token(JWT)を作成するスクリプトを書いていきます。

■コード

import jwt

payload_data = {
    "id": "001",
    "name": "kobayashi",
    "age": 25,
    "gender": "boy"
}

token = jwt.encode(
    payload=payload_data,
    key='my_secret'
)

print(token)

importでPyJWTモジュールを呼び出します。その後に、payload_dataという変数を作成し、その中に転送する情報をJSONの形式で記述し、格納します。

格納後、tokenという変数を作成し、その中でjwt.encode()関数を使用します。jwt.encode()関数の括弧内の第1の引数,パラメーターには、JSON Web Token(JWT)としてエンコードするためのpayload_dataを渡します。第2の引数,パラメーターには、アルゴリズムに適したキーを渡します。本来であれば、第3の引数,パラメーターで、Tokenを署名するためのアルゴリズムを渡しますが、今回は第3の引数,パラメーターは記述しません。

その後、エンコードされたJSON Web Token(JWT)をprint()関数で出力してみます。

■実行

このスクリプトを「jwt_test.py」という名前で保存し、コマンドプロンプトから実行してみます。

実行にしてみると、転送するための情報がJSON Web Token(JWT)として出力されました。

出力されたJSON Web Token(JWT)を、JSON Web Tokens(https://jwt.io/)で検証(デバック)してみます。

サイトの「Debugger」の項目で「Encoded」にJSON Web Token(JWT)を貼り付けて、「VERIFY SIGNATURE」にキー(鍵)を貼り付けてみると、「Signature Verified(署名の確認)」を表示されます。これで検証(デバック)は完了となります。

コメント

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