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)