Anyflow Embed Docs
管理画面を開く
  • 👋イントロダクション
    • はじめに
    • 初期セットアップ
    • 用語集
  • 🔰トライアルツアー
    • トライアルツアー初級編
      • STEP1|アカウント作成 〜 ソリューション作成
      • STEP2|エンドユーザー変数
      • STEP3|ifステップ
      • STEP4|変数の活用、デバッグ
      • 動画チュートリアル
    • トライアルツアー中級編
      • STEP1 | 独自のアクションを追加する
      • STEP2 | My Event を理解する
      • STEP3 | My Event を実装する
    • トライアルツアーが終わったら
  • 🍳レシピ
    • CRM
      • SalesforceのToDoデータを取得する
      • Salesforceの取引先データを取得する
      • Salesforceの取引先データを登録する
      • Salesforceの商談を取得する
      • Salesforceのリードを取得する
      • HubSpotのコンタクトデータを取得する
      • HubSpotの会社データを取得する
      • HubSpotの取引データを取得する
    • コミュニケーション
      • Slack チャンネルにファイルをアップロードする
      • Slack チャンネルのメンバー情報一覧を取得する
      • 独自のSlackBotを設定する
    • 人事労務
      • SmartHRの部署データを取得する
      • SmartHRの従業員データを取得する
      • freee人事労務の従業員データを取得する
      • freee人事労務の勤怠データを取得する
    • 会計
      • freee会計の事業所データを取得する
      • freee会計の取引先データを取得する
      • freee会計の取引データを取得する
      • freeeコネクタのスコープを変更する
    • グループウェア
      • Google DriveのOAuthアプリを作成する
  • 🎨ソリューションエディタ
    • ソリューションエディタとは
    • トリガー
      • 自社プロダクト起点
        • Clickトリガー
        • Requestトリガー
          • Responseステップ
        • My Eventトリガー
          • アクセストークンの発行
        • Webhookトリガー
        • Request / My Event / Webhook トリガーの違い
      • 外部プロダクト起点
        • ポーリングトリガー
        • リアルタイムトリガー
      • スケジューラートリガー
      • トリガー条件
    • アクション
      • APIの呼び出し
        • 専用アクション
        • カスタムアクション
        • HTTPアクション
      • データの変換
        • Pythonアクション
        • 変数アクション
        • リストアクション
        • 日付と時刻アクション
        • CSVアクション
      • データの記録
        • キーバリューストア(KVS)アクション
        • ログアクション
        • メールアクション
    • ロジック
      • if
      • 繰り返し
      • エラー監視
      • 停止
    • 変数
      • 標準変数
      • エンドユーザー変数
    • 共通仕様
      • スキーマ定義
      • 固定リストと動的リスト
      • Formula
  • 🖼️ウィザードエディタ
    • ウィザードエディタとは
    • ウィジェット
      • アシスト
      • 複数選択アシスト
      • テーブルアシスト
      • チェックボックス
      • マッピング
      • コンディション
      • CSV(ファイル全体)
      • CSV項目(ヘッダーのみ)
    • ウィザードの仕様
    • 詳細設定
      • Markdown記法
      • テキストの入力パターンを指定する
      • デフォルト値を指定する
  • 🔌コネクタ
    • 対応コネクタ一覧
    • SaaSコネクタ固有の注意点
      • SaaS側でIPアドレス制限をしている場合
      • 自社独自のOAuthクライアントが必須のSaaS
      • cybozu.com製品で認証エラーとなる場合
      • kintoneコネクタとkintone(OAuth)コネクタの違い
      • ZoomコネクタとZoom(カスタム)コネクタの違い
      • SlackBotコネクタの違い
      • 2種類のSmartHRコネクタについて
    • OAuth画面をカスタムする
  • 🚀リリース
    • テスト
    • デプロイ
    • デプロイ環境
    • エンドユーザーへの提供方法
    • 自社プロダクトへの組み込み
      • JWTや公開鍵を生成する
      • SDK組み込みツアー
    • Anyflowドメインでの提供
  • 🧰運用/保守
    • 実行履歴
      • エンドユーザー向け実行履歴
      • ベンダー向け実行履歴
    • エラーへの対応
      • 連携先アプリの認証エラー
      • アクションの自動リトライ
      • ソリューションの再実行
    • イベント通知
    • ソリューション実行の上限値
    • ソリューションの削除
  • 📄ポリシー
    • 障害時の対応
    • エンドユーザーの問い合わせ
    • サービスレベル/稼働率
    • サービスの責任範囲
    • セキュリティポリシー
  • ⚙️Anyflow SDK
    • Anyflow SDK v0.13.0
      • エラータイプ
      • リファレンス
      • マイグレーションガイド
      • よくあるご質問
  • ⚙️Anyflow API
    • Vender Server API
      • Open API Specification
    • End User API
      • Open API Specification
    • Webhook
      • Open API Specification
GitBook提供
このページ内
  • JWTを生成する前に
  • オリジンを共有いただく理由
  • JWTを生成する
  • ヘッダーの仕様
  • ペイロードの仕様
  • JWTキーを生成する
  • 秘密鍵を生成する
  • 公開鍵を生成する
  • サンプルコード
  • よくあるご質問
  • ユーザーインテグレーションとチームインテグレーションは何が異なりますか?
  • JWTの有効期限の推奨時間はありますか?
  1. リリース
  2. 自社プロダクトへの組み込み

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 アルゴリズムで生成する必要があります。

ヘッダーの仕様

Key
Value

alg

RS256

typ

JWT

ヘッダーサンプル

{
  "alg": "RS256",
  "typ": "JWT"
}

ペイロードの仕様

Claim
必須
型
値の作成元
説明

iss

◯

String

Anyflow

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-----

📘ヒント

サンプルコード

以下はPythonでJWTを生成するサンプルコードです。 以下のコードではanyflow_user_id などが指定されていないため、チームインテグレーションになります。

Python
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時間など短い時間を設定いただくことを推奨しております。

前へ自社プロダクトへの組み込み次へSDK組み込みツアー

最終更新 1 か月前

Anyflowがベンダーを識別するための値です。 から取得した値を使用してください。

抽出した公開鍵はから登録してください。

🚀
管理画面
Anyflow Embedの管理画面
チームインテグレーション
ユーザーインテグレーション