Python

【Python】pyjwt(RS256)のエンコード・デコード方法(公開鍵と秘密鍵を使用)

pyjwt-rsa-sha256-signature-algorithm-sample-code

 

エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。

 

普段はフリーランスでシステムエンジニアをしております。

 

今回は、Pythonのpyjwt + cryptographyを使ってRSA-SHA256(RS256)アルゴリズムで署名するときのエンコード(符号化)とデコード(復号化)する方法を紹介していきます。

 

動作確認には、Visual Studio Code (VS Code) を使用しているため、同様に確認したい方は、こちらの記事でVS CodeのPython開発環境を構築してみてください。

 

 

概要

 

pyjwt-token-rs256-algorithm-private-key-public-key

 

JSONのペイロードデータをRS256アルゴリズムと秘密鍵(Private Key)でエンコードし、JWTトークンを生成します。

 

そして、RS256アルゴリズム、JWTトークン、公開鍵(Public Key)を使ってデコードし、元のJSONのペイロードデータを読み取れるか確認していきます。

 

 

事前準備

 

RSA-SHA256(RS256)アルゴリズムで署名するために事前準備として秘密鍵と公開鍵を生成します。

 

秘密鍵の生成(ssh-keygen)

 

秘密鍵を生成するには、以下のssh-keygenコマンドを実行します。

 

 

カレントディレクトリに「id_rsa」というファイル名の秘密鍵が生成されていればオッケーです。

 

 

公開鍵の生成(openssl)

 

次に公開鍵を生成するには、以下のopensslコマンドを実行します。

 

 

カレントディレクトリに「id_rsa.pub」というファイル名の公開鍵が生成されていればオッケーです。

 

 

Windowsでopensslコマンドが実行できないときの対処方法

 

公開鍵の生成でopensslコマンドが実行できなかった場合、以下の記事をもとにWindowsにopensslをインストールしてから再度試してみてください。

 

openssl-install-for-windows
【TIPS】Windowsでopensslコマンドが実行できないときの対処方法Windowsにopensslをインストールする手順と動作確認方法を紹介しています。 WindowsのPowerShellなどで「openssl : 用語 'openssl' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。」というエラーが表示されたら、本記事でopensslをインストールしてください。 ...

 

 

pyjwtでRS256アルゴリズム署名を行う方法

 

pyjwtインストール

 

Pythonのpyjwtライブラリをインストールするため、以下のコマンドを実行します。

 

 

 

cryptographyインストール

 

Pythonのcryptographyライブラリをインストールするため、以下のコマンドを実行します。

 

 

 

RS256と秘密鍵(id_rsaファイル)でpyjwtのエンコード

 

RS256と秘密鍵(id_rsaファイル)でpyjwtエンコードするサンプルコードは、以下のとおりです。

 

 

 

pyjwtのencodeメソッドの引数にペイロード、秘密鍵、アルゴリズムの種類を指定してエンコードを行います。

 

 

RS256と公開鍵(id_rsa.pubファイル)でpyjwtのデコード

 

RS256と公開鍵(id_rsa.pubファイル)でpyjwtデコードするサンプルコードは、以下のとおりです。

 

 

 

pyjwtのdecodeメソッドの引数にJWTトークン、公開鍵、アルゴリズムの種類を指定してデコードを行います。

 

デコードの結果、ペイロードデータと同じデータが表示されたらオッケーです。

 

 

動作確認

 

こちらのサイトでAlgorithm欄に「RS256」、Encoded欄に「<JWTトークン>」を指定すると、右側のPAYLOAD DATA欄にペイロードデータが表示されるので、本サイトでも動作確認が可能です。

 

pyjwt-token-rs256-encode-decode-confirmation

 

 

まとめ

 

いかがでしたでしょうか。

 

pyjwtとRS256を使ったエンコードとデコードする方法を紹介してきました。

 

WEBアプリケーションでも使われるため、ぜひ一度手を動かしてエンコードとデコードできるか試しておくとよいでしょう。

 

 

【関連記事】

 

【TIPS】Pythonのpyjwt(Json Web Token)でエンコード・デコードする方法

 

【TIPS】Python base64で文字コードのエンコード(符号化)・デコード(復号化)をマスター!