JWTや公開鍵を生成する
JWTを生成する方法と、JWTキー(秘密鍵 / 公開鍵)を生成する方法について
最終更新
{
"alg": "RS256",
"typ": "JWT"
}{
"iss": "00000000-0000-0000-0000-000000000000", // Anyflowが発行した値[*]
"exp": 1609426800, // 有効期限[*]
"jti": "2565d821-81a2-40d0-8e9e-fbc012345678", // UUID[*]
"anyflow_team_id": "00000000-0000-0000-0000-000000000000", // エンドユーザーチームの一意な識別子[*]
"anyflow_team_email": "info@example.com", // エラーの通知先[*]
"anyflow_team_name": "Foo inc.", // anyflow_team_idのエンドユーザーチーム名[*]
"anyflow_user_id": "00000000-0000-0000-0000-000000000000", //エンドユーザーの一意な識別子
"anyflow_user_email": "taro.tanaka@example.com", // エラーの通知先
"anyflow_user_name": "田中太郎", // anyflow_user_idのエンドユーザー名
"nbf": 1640876400, // 有効になる日時
"iat": 1640790000 // 発行日時
}$ openssl genrsa -out private.key 2048
$ cat private.key
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----$ openssl rsa -in private.key -pubout -out public.key
$ cat public.key
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----import jwt as pyjwt # pip install pyjwt
from datetime import datetime, timedelta
import uuid
# 入手方法はカスタマーサクセス担当者までお願いします。
vender_id = '59fe0d15-60ef-47f5-8f10-399aa17c7e82'
# JWTの有効期限(UNIXタイムスタンプ)
expiration_time = (datetime.now() + timedelta(days=1)).timestamp()
# JWTのユニーク性を担保するための識別子
unique_id = str(uuid.uuid4())
# ベンダープロダクトのエンドユーザーチーム(組織)を識別するID
external_team_id = 'example_external_team_id'
# エンドユーザーチームの代表のメールアドレス(エラーの通知先になります)
team_email = 'info@example.com'
# エンドユーザーチームの名前
team_name = 'Example Inc.'
# 生成した秘密鍵
PRIVATE_KEY = '''-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----'''
# JWTを生成
encoded_team_jwt = pyjwt.encode({
'iss': vender_id,
'exp': expiration_time,
'jti': unique_id,
'anyflow_team_id': external_team_id,
'anyflow_team_email': team_email,
'anyflow_team_name': team_name
}, PRIVATE_KEY, algorithm='RS256')
print(encoded_team_jwt)
# > "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI1OWZlMGQxNS02MGVmLTQ3ZjUtOGYxMC0zOTlhYTE3YzdlODIiLCJleHAiOjE2MDk0MjY4MDAsImV4dGVybmFsX3RlYW1faWQiOiJleGFtcGxlX2V4dGVybmFsX3RlYW1faWQiLCJ0ZWFtX2VtYWlsIjoiaW5mb0BleGFtcGxlLmNvbSIsInRlYW1fbmFtZSI6IkV4YW1wbGUgSW5jLiJ9.TuaiIJCjlrP_9o0BW3QZ8_wmB4JZG2sWG15aAB-qwjIREUcYGgJ1zfY2khXCd0IxXF9lwjxUApW2I0msVvuQd9ySAAMTPNEBeKZcKkUa8UYnkrz3I7OGN-5X6q-qh6r6VBLZ5UJb9qHql2f5mZJXpjK0oygsUSXZE3gDyzVDywce65lHz7IfB904UvnFCR6DCkusq8Ntob1hJ-eFf3bkhQALlLnJ7J4_Pxg9VxZjkD5_LprEZdIqpnFIkuugdsWFXVo2z_wIzjhsJaPo7TAVoc1gMVZQVaX-2kyOkSOOPK_R4-mHyQTf-z5j1-JobN6_CupaZ6cL9iWx9tYt6GMkoQ"