コールバックの検証

について vcr SDK の `object` を使用すると、アプリケーションが受信したコールバックが Vonage Cloud Runtime プラットフォームからのものであるかどうかを確認できます。Vonage Cloud Runtime プラットフォームからインスタンスに対して行われるすべてのリクエストには、`` に、Vonage アプリケーションの秘密鍵で署名された JWT が含まれます。 Authorization ヘッダーを使用する。

重要だ: Applications で VCR サブスクリプション・プロバイダー(メッセージ、音声、または会話)を使用している場合、Webhook は VCR コールバック・ルーターを経由してルーティングされます。この場合、 Authorization header はコールバックルーター自体のみを認証します — それは 違う 元のイベントがVonageから送信されたものであること、または転送中にペイロードが改ざんされていないことを保証するものではありません。これらのWebhookの発信元を完全にVerifyするには、以下の点についてもVerifyする必要があります。 X-Vonage-Webhook-Auth-Token 以下に説明するヘッダー。

お使いのアプリにこれが該当するかどうかは、Webhook URLを確認することで確認できます。URLが以下のいずれかで始まる場合、お使いのアプリはVCRコールバックルーターを介してWebhookを受信しているため、このガイドに記載されている追加の確認手順に従ってください:

  • https://callback-router.euw1.runtime.vonage.cloud/
  • https://callback-router.use1.runtime.vonage.cloud/
  • https://callback-router.apse1.runtime.vonage.cloud/
  • https://callback-router.apse2.runtime.vonage.cloud/

WebhookのURLを手動で設定し、パブリックインスタンスのURLを直接指すようにしている場合は、この説明は該当しません。

Vonage Webhookのシークレットを取得する

これを検証するには、 X-Vonage-Webhook-Auth-Token ヘッダーには、VonageのWebhookシークレットが必要です。

  1. にログインする。 Vonage APIダッシュボード.
  2. Applicationsの設定画面に移動してください。
  3. を見つける。 Webhookのシークレット セキュリティ設定内の(「シグネチャ秘密鍵」とも呼ばれる)項目。
  4. この値を、アプリケーションの環境変数に安全に保存してください(例: VONAGE_WEBHOOK_SECRET). ソースコードにハードコーディングしないでください。

コールバックルーターの JWT を Verify してください (Authorization (ヘッダー)

用途 vcr.verifyAuth() そのリクエストがVCRコールバックルーターによって送信されたことを確認するためです。この手順は依然として有効であり、最初の検証段階として維持すべきです。

メソッドのシグネチャ:

vcr.verifyAuth(token: string)

用途 verifyAuth ミドルウェア関数内で。トークンが無効な場合、エラーが発生します。

// Express Example
const authMiddleware = (req, res, next) => {
    const token = req.headers['authorization'];
    if (!token) {
        return res.status(401).json({ error: 'Missing Authorization header' });
    }

    try {
        vcr.verifyAuth(token);
        next();
    } catch (error) {
        return res.status(401).json({ error: error.message });
    }
};

Verify Vonage Origin トークン (X-Vonage-Webhook-Auth-Token (ヘッダー)

VCR コールバックルーターを使用する Applications では、さらに X-Vonage-Webhook-Auth-Token ヘッダー。このトークンはVonageによって署名されており、そのイベントが実際にVonageから発信されたものであり、改ざんされていないことを暗号学的に確認することができます。

const jwt = require('jsonwebtoken');

const verifyVonageOrigin = (req, res, next) => {
    const vonageToken = req.headers['x-vonage-webhook-auth-token'];

    if (!vonageToken) {
        return res.status(401).json({ error: 'Missing X-Vonage-Webhook-Auth-Token header' });
    }
    try {
        // Verify the token using your Vonage Webhook Secret
        jwt.verify(vonageToken, process.env.VONAGE_WEBHOOK_SECRET, { algorithms: ['HS256'] });
        next();
    } catch (error) {
        return res.status(401).json({ error: 'Invalid Vonage origin token: ' + error.message });
    }
};

VCRコールバックルーターを使用していないのですか?

Applications が Webhook を直接受信する場合(つまり、Webhook URL が https://callback-router.euw1.runtime.vonage.cloud/である。 Authorization ヘッダーには、Vonageが署名したオリジナルのJWTが含まれています。これはVCRではなく、Vonageプラットフォームによって発行されたものです。

この場合、 Vonage Webhookのシークレットを使用して、トークンの有効性を確認する必要があります.