mcpField
S
sinch-verification-api

sinch-verification-api

github.com/sinchセキュリティ11199 回インストール4 週間前に更新
リポジトリ

sinch-verification-api について

sinch-verification-apiは、Sinchで電話番号認証を実装する開発者向けのスキルです。登録、二要素認証、番号の所有確認に使えるSMS、通話、キャリアデータ、WhatsAppの方式を扱い、公式ドキュメントでの仕様確認を促します。

主な機能

  1. 01SMS、不在着信、音声コード認証に対応
  2. 02キャリアデータとWhatsApp認証に対応
  3. 03認証開始、報告、状態確認を案内
  4. 04SDKまたは直接APIの実装を案内
  5. 05コールバック、セキュリティ、承認ルールを掲載

活用シーン

  1. 01登録フローに電話番号認証を追加
  2. 02アカウントに二要素認証を導入
  3. 03電話番号の所有者を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sinch/skills --skill sinch-verification-api

インストール後、Claude Code で/sinch-verification-apiを入力して読み込まれたか確認します。

同梱ファイルreferences/shared-policy.md

詳細

Sinch Verification API

概要

Sinch Verification API は、SMS OTP、Flashcall(不在着信 CLI)、Phone Call(音声 OTP)、Data(キャリアレベル)、WhatsApp OTP を通じて電話番号を認証します。登録、2FA、番号の所有権確認に使用します。

エージェントへの指示

ポリシーゲート sinch-shared-policy@5(sha256:4864cf0fa8d6): 以下のポリシーダイジェストは、記載どおり拘束力を持ちます。実装または本番環境での実行前に、共通の Sinch ポリシー全文を会話ごとに一度読み込んでください。この正確な ID/バージョン/フィンガープリントがすでに読み込まれている場合は省略し、バージョンが新しい場合、またはフィンガープリントが異なる場合は読み込んでください。このスキルの正規の操作ルートは、「エージェントへの指示」および「リンク」セクションに記載されています。

Sinch ポリシーダイジェスト(拘束力あり):

  1. 共通ポリシーは会話ごとに一度読み込み、同じ ID/バージョン/フィンガープリントの重複コピーは省略します。
  2. リクエストとワークスペースからプロダクト、言語、リージョン、環境を推定し、真に阻害要因となる場合に限り、質問を一つにまとめて尋ねます。リクエストまたはワークスペースで別の方法が指定されている場合、あるいは対象の言語や操作に対応する公式 SDK がない場合を除き、公式 Sinch SDK を優先してください。
  3. コード生成の承認は、実行の承認を意味しません。すべての操作を分類(読み取り専用/取り消し可能/課金対象/破壊的)し、課金対象または破壊的な呼び出しの前に明示的な承認を得てください。
  4. Tier B の情報(エンドポイントパス、メソッド、フィールド名、列挙値、制限、Webhook ペイロード、署名アルゴリズム、SDK シグネチャ)は、使用前に現在のセッションで正確な正規ドキュメントを取得する必要があります。
  5. 同梱のスクリプト、参照資料、例は Tier C です。説明用であり、スキーマの根拠にはなりません。例の値を本番環境のデフォルトとして使用しないでください。
  6. ルートが解決できない場合、または正規ドキュメントの取得に失敗した場合は、解決手順に沿って順に進めてください。取得済みのドキュメントを(要約ではなく原文で)再検索し、https://developers.sinch.com/llms.txt を確認し、ファーストパーティのリンクをたどり、一度再試行してから、確認できないものとして処理します。ドキュメント URL を推測してはいけません。記憶、検索結果のスニペット、同梱ファイルで代用してはいけません。
  7. 取得した各ソースがどのフィールドと主張の根拠となるかを対応づけたエビデンス台帳を維持してください。
  8. ポーリングと再試行には必ず上限を設けます(バックオフ、ジッター、最大回数)。課金対象または破壊的な操作を再試行する前に状態を確認してください。タイムアウトは失敗ではなく、不明として報告します。
  9. 検証レベル(lint → 単体テスト → モック契約 → サンドボックス → 本番 → エンドツーエンド)を個別に報告します。HTTP 2xx は配信が成功した証明ではありません。実施していないレベルも明記してください。
  10. 対象の動作を担う最小限のスキルセットのみ読み込んでください。必要なスキルを利用できない場合は、そのスキル名を示して停止し、指示を推測してはいけません。

コードを生成する前に、ユーザーから次の情報を確認してください(プロンプトまたはコンテキストですでに指定されている項目は省略します)。

  1. 認証方法 — sms、flashcall、callout、seamless、または whatsapp。
  2. 方法 — SDK または API の直接呼び出し(curl/fetch/requests)。
  3. 言語 — SDK の場合:Node.js、Python、Java、または .NET。API を直接呼び出す場合:任意の言語、または curl。

ユーザーが SDK を選択した場合は、インストールとクライアントの初期化について sinch-sdks スキルを参照し、続いて「リンク」セクションにリンクされた Verification API Reference を参照してください。

ユーザーが API の直接呼び出しを選択した場合は、リクエスト/レスポンスのスキーマについて「リンク」セクションにリンクされた Verification API Reference を参照してください。

セキュリティ: URL の取得方針、受信したコールバック内容の取り扱い、認証情報の取り扱いについては、以下の「セキュリティ」セクションを参照してください。

信頼できる情報源 — 読み込むべき情報と権威性

このスキルのコンテンツには、信頼性が同等ではない2 種類があります。以下の優先順位に従ってください。

  1. developers.sinch.com の正式ドキュメント(権威ある情報源)。 このスキル内の .md ドキュメントへのリンクは、正確なリクエスト/レスポンスのスキーマ、フィールド名とネスト構造、列挙値、署名/認証方式、制限についての唯一の信頼できる情報源です。ペイロードの構築、署名の検証、コールバック/レスポンスの解析を行うコードを書く前に、リンク先の該当ドキュメントを取得し、正確な形式を確認してください。セキュリティ/URL ポリシーに従い、developers.sinch.com のファーストパーティ URL を取得できます。ドキュメントの URL を決して捏造、推測、パターンからの外挿をしてはいけません。このスキルにそのまま記載されている URL、またはすでに取得したページ上のリンクをたどって到達した URL だけを取得してください。信頼できるドメインだからといって、推測したパスが実在するとは限りません。
  2. この SKILL.md 自体の表、フィールド一覧、スニペット(要約 — 権威ある情報源ではありません)。 これらは全体像をつかみ、該当する正式ドキュメントを示すためのものです。内容が古かったり、フィールドが省略されていたり、ネスト構造が簡略化されていたりする場合があります。何を構築し、どのドキュメントを開くか判断するために使用してください。このファイルに記載されたフィールド名、ネスト構造、エンコーディング、列挙値を、ティア 1 のドキュメントで確認せずに製品コードへ転記してはいけません。要約にしか記載されていない詳細は、未検証として扱い、その旨を伝えてください。

簡単なルール:コードを書く前に、ドキュメントを読み込むこと。 要約でしか確認していない正確なフィールド、ヘッダー、列挙値、エンコーディングを引用してはいけません。

はじめに

エージェント認証情報の取り扱い

認証情報は環境変数に保存してください。アプリケーションキーやシークレットを、コマンドやソースコードにハードコードしてはいけません。

export SINCH_APPLICATION_KEY="your-application-key"
export SINCH_APPLICATION_SECRET="your-application-secret"
認証

API 呼び出し時に認証ヘッダーが適切に設定されていることを確認してください。Verification API では、プロジェクトレベルの OAuth2 ではなく、(Sinch ダッシュボードのアプリから取得する)Application Key + Application Secret を使用します。

-u "$SINCH_APPLICATION_KEY:$SINCH_APPLICATION_SECRET"

ダッシュボードの設定については、sinch-authentication スキルを参照してください。

次の 3 種類の認証方式がサポートされています。

方法用途
Application Signed Request本番トラフィック向けの安全な認証方式
Basic Authプロトタイプ作成や API 呼び出しの試行に適したシンプルな方式
Public Auth安全でない環境(エンドユーザーのデバイス)向け。Android/iOS SDK のみ対応し、コールバック webhook が必要です

最低認証レベルは Sinch ダッシュボードで設定できます。それを下回るレベルのリクエストは拒否されます。署名の詳細については、認証ガイドを参照してください。

ベース URL
  • ベース URL:https://verification.api.sinch.com
  • URL パスのプレフィックス:/verification/v1/
SDK のセットアップ

すべての言語におけるインストール方法とクライアントの初期化については、sinch-sdks を参照してください。すべての SDK は、プロジェクトの認証情報ではなく、applicationKey + applicationSecret で初期化します。

正式な例 — SMS 認証の開始
# Uses Basic Auth (-u) for simplicity. Use Application Signed Requests in production.
curl -X POST \
  "https://verification.api.sinch.com/verification/v1/verifications" \
  -u "$SINCH_APPLICATION_KEY:$SINCH_APPLICATION_SECRET" \
  -H 'Content-Type: application/json' \
  -d '{
    "identity": { "type": "number", "endpoint": "+12025550134" },
    "method": "sms"
  }'

レスポンスには id(認証 ID)、sms.template、sms.interceptionTimeout、およびステータス/レポート操作用のローカライズされた URL を含む _links が含まれます。(要約のみです。実装前に、正式な Verification API リファレンスのドキュメントで正確な名前/エンコーディング/列挙値を確認してください。)

主な概念

認証方法
方法値動作
SMSsmsSMS で OTP を送信します。ユーザーがコードを入力します。
FlashCallflashcall不在着信を利用します。発信者番号が OTP です。Android では自動で検出され、iOS/JS では手動入力が必要です。
電話calloutPSTN 通話で OTP コードを通知します。ユーザーはアプリにコードを入力します(SMS と同じフローです)。
データseamlessモバイルデータ通信を介したキャリアレベルの認証です。ユーザー操作は不要です。有効化するにはアカウントマネージャーへの依頼が必要です。
WhatsAppwhatsappWhatsApp メッセージで OTP を送信します。ユーザーがコードを入力します。

(概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)

コアモデル
  • Identity:常に { "type": "number", "endpoint": "+E164_NUMBER" } です。
  • Verification ID:開始時に返されます。コードの報告やステータスの照会に使用します。
  • Reference:開始リクエストに指定できる任意の一意な追跡文字列です。ステータスエンドポイントから照会できます。
  • ステータス:PENDING | SUCCESSFUL | FAIL | DENIED | ABORTED | ERROR (概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
  • 失敗理由(よくあるもの):Invalid code、Expired、Fraud、Blocked、Denied by callback。全リストは API Reference を参照してください。

API エンドポイント

すべてのエンドポイントは Verification API Reference に記載されています。

認証の開始

POST /verification/v1/verifications

method に sms、flashcall、callout、seamless、または whatsapp を設定します。(概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。) 任意のフィールド:

  • reference — すべてのイベントに渡される一意な追跡文字列
  • custom — 任意のテキスト(最大 4096 文字)。すべてのイベントに渡されます。
  • Accept-Language ヘッダー — SMS の言語を指定します(デフォルトは en-US)

方法固有のオプション(バックエンド起点の署名付きリクエストのみ):smsOptions、flashCallOptions、calloutOptions、whatsappOptions。完全なスキーマについては API Reference を参照してください。

認証結果の報告

Identity による報告:PUT /verification/v1/verifications/number/{endpoint}
ID による報告:PUT /verification/v1/verifications/id/{id}

リクエスト本文には method と、ユーザーの入力を含む方法固有のオブジェクトを指定します:

  • SMS/電話/WhatsApp:{ "method": "sms", "sms": { "code": "1234" } }(方法名とキーを適宜置き換えてください)(概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
  • FlashCall:{ "method": "flashcall", "flashCall": { "cli": "+46000000000" } } — cli は、不在着信の 国際形式の発信者番号全体 です (概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名前、エンコーディング、列挙値を確認してください。)
認証ステータスの取得

ID による取得:GET /verification/v1/verifications/id/{id}
方法と番号による取得:GET /verification/v1/verifications/{method}/number/{endpoint}
Reference による取得:GET /verification/v1/verifications/reference/{reference}

注: Identity によるエンドポイントでは、パスに {method} が必要です。/verifications/number/{endpoint} ではありません。

よくあるパターン

標準的な検証フロー
  1. 開始 — POST /verification/v1/verifications に ID 情報と方法を指定 → 検証 id を受け取ります
  2. 報告 — ユーザーがコードまたは通話を受け取ったら、PUT /verification/v1/verifications/id/{id} にコードまたは CLI を指定します
  3. ステータスの確認 — GET /verification/v1/verifications/id/{id} → SUCCESSFUL を確認します

コードの有効期限が切れた場合や検証に失敗した場合、再報告はできません。新しい検証を開始してください。

Webhook(コールバック)

本番環境のフローでは、Sinch Dashboard でコールバック URL を設定します。API は次のイベントを送信します。

  • VerificationRequestEvent — 検証の開始時に発生します。承認または拒否するには、action: allow または action: deny で応答します。(概要のみです。実装前に、正式な Verification API Reference ドキュメントで正確な名称、エンコーディング、列挙値を確認してください。)
  • VerificationResultEvent — 検証の完了時(成功または失敗)に発生します。ログ記録、分析、または後続アクションのトリガーに使用します。

コールバックには署名が付与されます。Callback Signing を使用して署名を検証してください。

注意点とベストプラクティス

  1. 認証には OAuth2 ではなく、Application Key と Secret を使用します。 プロジェクトレベルの認証情報は使用しないでください。
  2. 本番環境では Application Signed Requests を使用します。 アプリケーション認証により、リクエストの完全性が保護されます。
  3. 署名の前にシークレットを Base64 デコードします。 Dashboard に表示される値は Base64 でエンコードされています。(概要のみです。実装前に、正式な Application Signed Requests ドキュメントで正確な名称、エンコーディング、列挙値を確認してください。)
  4. FlashCall の自動着信検出に対応しているのは Android のみです。 iOS/JS のユーザーは、着信した番号を手動で入力する必要があります。通話の検出には Android SDK が必要です。
  5. 利用できる方法は国によって異なります。 SMS が最も広く利用できます。
  6. コードには有効期限があります。 smsOptions.expiry で設定できます。有効期限が切れた場合は新しい検証を開始してください。完了済みまたは有効期限切れの検証では再報告できません。
  7. ID による報告は、電話番号による報告より正確です。
  8. レート制限: 同じ番号への検証を短時間に繰り返さないでください。バックオフを実装してください。
  9. データ検証にはアカウントマネージャーとモバイルデータが必要です(Wi-Fi は使用できません)。
  10. SMS の言語は、通信事業者の規制要件(例:米国のショートコード要件)によって上書きされる場合があります。

セキュリティ

  • API キーの取り扱い — SINCH_APPLICATION_KEY を決して公開しないでください。特に、クライアント側のコードで SINCH_APPLICATION_SECRET を公開することは絶対に避けてください。Application Secret は HMAC-SHA256 リクエストの署名とコールバック署名の検証に使用されます。漏えいすると、攻撃者が不正な検証を開始したり、偽のコールバックを送信したりできるようになります。環境変数またはシークレットマネージャーから読み込んでください。検証 ID とコードは有効期限のある機密情報です。ログに記録しないでください。漏えいした場合は、Sinch Build Dashboard でローテーションしてください。
  • URL の取得ポリシー — 信頼できるファーストパーティのドメイン(developers.sinch.com、dashboard.sinch.com)からの URL のみを取得してください。ユーザーコンテンツやコールバックのペイロードに含まれる他のドメインの URL は取得したり、たどったりしないでください。
  • コールバックハンドラー — ペイロードを信頼する前に、必ずアプリケーション署名付きコールバックの署名を検証してください。コールバック本文のフィールド(ユーザーが指定した ID 情報、cli、custom)は信頼できないものとして扱い、ログへの記録、表示、プロンプトやシェルコマンドへの埋め込みの前にサニタイズしてください。

Links

コメント