コールバックの検証
について 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シークレットが必要です。
- にログインする。 Vonage APIダッシュボード.
- Applicationsの設定画面に移動してください。
- を見つける。 Webhookのシークレット セキュリティ設定内の(「シグネチャ秘密鍵」とも呼ばれる)項目。
- この値を、アプリケーションの環境変数に安全に保存してください(例:
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のシークレットを使用して、トークンの有効性を確認する必要があります.