メインコンテンツにスキップ

JWTを使ったIdentity VerificationからMessenger Securityへの移行

ユーザーのMessengerセッションをクロスユーザーなりすまし、セッション盗難、不正なデータ属性更新から保護する方法。

お客様のセキュリティと柔軟性を向上させるために、Messengerでのユーザー認証により安全でスケーラブルな方法としてJSON Web Tokens(JWTs)を導入しました。

現在Identity Verification (IDV)を使ってユーザーを認証している場合、JWTsに切り替えることで以下が得られます:

  • 認証のより高度な制御 – 固定設定に頼らず、自分でセッションの有効期限や取り消しを管理できます。

  • 強化されたセキュリティ – JWTsは時間制限付きの署名付きトークンを可能にし、リプレイ攻撃のリスクを減らします。

  • 改善されたデータセキュリティ – 更新可能なユーザー属性を正確に定義し、機密データの露出を減らします。

  • 将来への備え – JWTsはIDVの推奨代替手段であり、認証システムを最新のベストプラクティスに合わせて維持します。

誰が移行すべきか?

この移行は現在IDVを使用しているすべてのお客様に関連し、特に以下の場合に推奨されます:

✅ セッションの有効期限やトークン取り消しをより良く制御したい

✅ 安全でユーザー固有の属性更新を強制したい

✅ 機密顧客データを扱い、より強力な認証が必要な場合

✅ ワークスペースの長期的なセキュリティ改善を計画している場合

IDVは当面利用可能ですが、JWTsはより現代的で安全な認証方法であり、ベストプラクティスに沿っています。このガイドでは移行手順を段階的に説明します。

JWTsを使わない場合、Messengerの会話履歴はどうなりますか?

MessengerチャネルにMessenger Security with JWTsが設定されていない場合、お客様はMessengerで過去14日間の自分の会話履歴のみを見ることができます。この制限は2026年4月にセキュリティ対策として導入されました。

お客様に完全な会話履歴の表示を復元するには、以下の移行手順に従ってMessenger Security with JWTsを設定してください。JWTsがプラットフォームで有効になると、そのプラットフォームの14日間制限は解除されます。14日より古い会話はMessengerでは非表示になりますが削除されず、Inboxのチームメンバーには表示され続けます。


Identity VerificationとMessenger Security with JWTsの主な違い

Identity Verification

Messenger Security with JWTs

認証方法

HMAC-SHA256署名付きハッシュ

JWT署名付きトークン

有効期限対応?

いいえ

はい

安全なデータ更新対応?

いいえ

はい

推奨用途

Messengerでの基本的な本人確認

より良いセッション制御と安全なデータ処理を伴う安全な認証

モバイルSDK対応:JWT認証はWeb、iOS、Androidで利用可能です。iOS SDKはバージョン18.7.0以降、Android SDKはバージョン15.16.0以降が必要です。設定方法はiOSとAndroidの開発者ドキュメントをご覧ください。


移行手順

ステップ1:ハッシュの代わりにJWTを生成するよう統合を更新する

  1. Identity Verification用のHMAC-SHA256署名の生成を停止してください。

  2. Messenger用に新しいシークレットキーを生成し、適用するプラットフォームを選択してください。

  3. 代わりに、シークレットキーを使ってJWTを生成してください。

Node.js用のサンプルサーバーサイドコード設定例はこちらです:

const jwt = require("jsonwebtoken");

const payload = {
user_id: "USER_ID_HERE", // Required
email: "EMAIL_ADDRESS_HERE", // Optional
data_attribute: "YOUR_DATA", // Optional
exp: Math.floor(Date.now() / 1000) + 3600 // Expires in 1hr
};

const secret = process.env.MESSENGER_SECRET_KEY || "YOUR_MESSENGER_SECRET_KEY"; // Secure key storage

const intercomUserJwt = jwt.sign(payload, secret, { algorithm: "HS256" });

JWTペイロードに含める内容:

  • user_idでユーザーを識別します。これは必須項目です。

  • 有効期限用のオプションタイムスタンプ(exp)

  • ユーザーに安全に送信したいその他のデータ属性

ワークスペース用JWT生成の詳細手順はヘルプセンターのメインドキュメントをご覧ください。

注意:現在Messengerを通じてユーザーデータ属性や会社データを送信している場合は、それらの属性をユーザーJWT内で安全に送信するよう統合を更新してください。JWT外で渡されるcompanyオブジェクトはJWTが存在する場合無視され、会社情報は更新されずlast_seenも更新されません。これを行うには、ペイロードに属性を追加し、不安全なMessengerリクエストをブロックしてください。

上記コード例では、ペイロードにuser_idとemailを署名しています。有効期限もペイロードに含める必要があります。

ステップ2:ユーザーのJWTを送信するようフロントエンドスニペットを更新する

IDV用のHMAC署名の代わりに、Messenger設定でJWTをintercom_user_jwtとして渡してください。

Web(JavaScript SDK)用:

window.Intercom("boot", {
api_base: "https://api-iam.intercom.io",
app_id: "<YOUR_APP_ID_HERE",
intercom_user_jwt: "<YOUR_USER_JWT_HERE>"
};

前節で述べたように、データ属性はJWT内で送信されるため、スニペットからは削除されています。

ワークスペース用JWT生成の詳細手順はヘルプセンターのドキュメントをご覧ください。

モバイル(iOSおよびAndroid SDK)用:JWTはiOS SDK(バージョン18.7.0以降)とAndroid SDK(バージョン15.16.0以降)でサポートされています。アプリ内でsetUserJwtメソッドを使ってJWTを渡してください。詳細はiOSとAndroidの開発者ドキュメントをご覧ください。


トラブルシューティング

JWTへの移行を支援するために、設定 > Messenger > セキュリティに詳細な失敗ログとトークンデバッガーツールがあります。

詳細はインストールガイドこちらをご覧ください。


よくある質問

移行しないとどうなりますか?

Identity Verificationは当面利用可能ですが、JWTsはより強力なセキュリティと優れた制御を提供します。

JWTセッションを取り消すには?

短い有効期限(exp)を設定するか、署名キーをローテーションして古いトークンを無効化できます。

Identity VerificationとJWTsを同時に使えますか?

JWT認証が有効になると、Identity Verificationは不要になります。ただし、Web、iOS、AndroidではJWTとIdentity Verificationを個別に設定して独立して使用できます。

こちらの回答で解決しましたか?