LoginSignup
0
2

More than 1 year has passed since last update.

PyJWTを利用したES256形式のJWT生成方法 メモ

Posted at
  • PyJWTを利用したES256形式のJWTの生成方法についてメモする。

事前準備

署名用公開鍵・秘密鍵の生成

  • こちらを参考にOpenSSLを利用して生成する。

PyJWTインストール

pip install PyJWT

実装

import jwt

##### JWT 生成 ####
# 1. OpenSSLで生成した署名用秘密鍵の読み込み
with open('./es256.key.pkcs8') as f_private:
    private_key = f_private.read()

# Sign in With Apple用クライアントシークレット例を参考にヘッダー、ペイロードを定義
# 以降のデコード処理でこけるため、expを未来日に変更する。
header = {
    'alg': 'ES256',
    'kid': 'ABC123DEFG'
}
payload = {
    'iss': 'DEF123GHIJ',
    'iat': 1437179036,
    'exp': 4102326000,
    'aud': 'https://appleid.apple.com',
    'sub': 'com.mytest.app'
}

# 2. JWT生成
encoded_jwt = jwt.encode(payload, private_key,
                         algorithm='ES256', headers=header)
print("encoded_jwt:", encoded_jwt)

##### JWT 検証 #####
# 1. OpenSSLで作成した署名用公開鍵の読み込み
with open('./es256.pub.key') as f_public:
    public_key = f_public.read()

# 2. JWTデコード
# ※audが含まれている場合は引数に`audience`が必要
decoded_jwt = jwt.decode(encoded_jwt, key=public_key,
                         audience='https://appleid.apple.com', algorithms=['ES256'])
print("decoded_jwt:", decoded_jwt)

動作確認

python jwt_test.py
encoded_jwt: eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IkFCQzEyM0RFRkcifQ.eyJpc3MiOiJERUYxMjNHSElKIiwiaWF0IjoxNDM3MTc5MDM2LCJleHAiOjQxMDIzMjYwMDAsImF1ZCI6Imh0dHBzOi8vYXBwbGVpZC5hcHBsZS5jb20iLCJzdWIiOiJjb20ubXl0ZXN0LmFwcCJ9.TAfLTlq8K9utFMYm2biURdkjL6453wuLMM17NuPQVibJWv0lpE9BiHm4IaIWof9mGqnA11xRdIkGWDmzROZqWQ
decoded_jwt: {'iss': 'DEF123GHIJ', 'iat': 1437179036, 'exp': 4102326000, 'aud': 'https://appleid.apple.com', 'sub': 'com.mytest.app'}

参考情報

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2