JWTや公開鍵を生成する
JWTを生成する方法と、JWTキー(秘密鍵 / 公開鍵)を生成する方法について
JWTを生成する前に
ウィザードを埋め込むサイトのオリジン(URL)をAnyflow CSチームにご連絡ください。
e.g.
http://localhost:8000
http://dev.example.com:8080
https://stg.example.jp
※開発環境や検証環境など、SDKを使用し得る環境のオリジンを一通りご連絡ください。 後から追加/変更することも可能です。
オリジンを共有いただく理由
Anyflow SDKを使用してソリューションなどのデータを取得する場合、ベンダープロダクトから直接 Anyflow Embed の API へリクエストを送信することになります。ブラウザはあるオリジンから異なるオリジンにリクエストを送る場合、オリジンをまたいで通信を行っても良いかどうかを自動的に検証します。 その検証を通過させるためにはAnyflowのサーバーにてお客様のオリジンを許可リストに含める必要があるため、オリジンを予めご提供いただいております。
JWTを生成する
Anyflow Embedでは、JWTを使用してベンダープロダクトとデータのやりとりを行います。 Anyflow SDKの利用にはベンダープロダクトのサーバーサイドで生成したJWTが必要です。
なお、JWTは RS256
アルゴリズムで生成する必要があります。
ヘッダーの仕様
alg
RS256
typ
JWT
ヘッダーサンプル
{
"alg": "RS256",
"typ": "JWT"
}
ペイロードの仕様
exp
◯
Integer
ベンダー
有効期限(UNIXタイムスタンプ)を指定します。 セキュリティの側面から1時間など短い時間を推奨しております。
jti
◯
String
ベンダー
JWTのユニーク性を担保するための識別子を指定します。 JWTを発行するごとに別の値が設定されるように、UUIDなどを指定します。
anyflow_team_id
◯
String
ベンダー
一意なエンドユーザーチームの識別子を指定します。 プロダクト側で生成した自由な値を使用してください。
anyflow_team_email
◯
String
ベンダー
通知などに利用されるエンドユーザーチームの代表メールアドレスを指定します。
anyflow_team_name
◯
String
ベンダー
通知などに利用されるエンドユーザーチームの名前を指定します。
anyflow_user_id
✕
String
ベンダー
一意なエンドユーザーの識別子を指定します。 チームインテグレーションをする際はnullを指定します。
anyflow_user_email
✕
String
ベンダー
通知などに利用されるエンドユーザーのメールアドレスを指定します。 anyflow_user_idと同様に、チームインテグレーションをする際はnullを指定します。
anyflow_user_name
✕
String
ベンダー
エンドユーザーの名前を指定します。 anyflow_user_idと同様に、チームインテグレーションをする際はnullを指定します
nbf
✕
Integer
ベンダー
JWTが有効になる日時を指定します。
iat
✕
Integer
ベンダー
JWTが発行された日時を指定します。
セキュリティの観点から一度使用したJWTを再度使用することはできません。そのため、JWTは生成されるごとに異なるユニークな値にする必要があります。
ヒント
anyflow_user_*
がJWTに格納されていた場合はユーザーインテグレーションになります。
必須である anyflow_team_*
しか格納されていない場合はチームインテグレーションになります。
ペイロードサンプル
{
"iss": "00000000-0000-0000-0000-000000000000", // Anyflowが発行した値
"anyflow_team_email": "[email protected]", // エラーの通知先
"anyflow_team_id": "00000000-0000-0000-0000-000000000000", // エンドユーザーチームの一意な識別子
"anyflow_team_name": "Foo inc.", // anyflow_team_idのエンドユーザーチーム名
"anyflow_user_id": "00000000-0000-0000-0000-000000000000", //エンドユーザーの一意な識別子
"anyflow_user_email": "[email protected]", // エラーの通知先
"anyflow_user_name": "田中太郎", // anyflow_user_idのエンドユーザー名
"jti": "2565d821-81a2-40d0-8e9e-fbc012345678", // UUID
"exp": 1609426800, // 有効期限
"nbf": 1640876400, // 有効になる日時
"iat": 1640790000 // 発行日時
}
JWTキーを生成する
秘密鍵を生成する
秘密鍵を生成するには、次の通りにコマンドを実行します。
$ 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-----
公開鍵を登録する
Anyflow管理画面に公開鍵を登録してください。

サンプルコード
以下はPythonでJWTを生成するサンプルコードです。
以下のコードではanyflow_user_id
などが指定されていないため、チームインテグレーションになります。
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 = '[email protected]'
# エンドユーザーチームの名前
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"
よくあるご質問
ユーザーインテグレーションとチームインテグレーションは何が異なりますか?
こちらを参考にしてください。
JWTの有効期限の推奨時間はありますか?
JWTの有効期限(exp)に関して、セキュリティの側面から1時間など短い時間を設定いただくことを推奨しております。
最終更新