https://a.storyblok.com/f/270183/1368x665/09105c4754/26mar_dev-blog_silent-auth-video.jpg

Silent AuthとVideo APIでパスワードなしのビデオ・ログインを構築する

最終更新日 March 12, 2026

所要時間:2 分

パスワードなしのリアルタイムビデオ認証は、ライブセッション開始前の摩擦を減らし、オンボーディングのコンバージョン率を向上させます。パスワードやワンタイムコードはユーザーの動きを鈍らせます。これはセッション放棄のリスクを高めます。

VonageネットワークAPIは、認証をモバイルネットワークレイヤーに移行し、摩擦を減らします。サイレント認証 サイレント認証 (Silent Auth)-で利用できます。 Vonage Verify APIで利用可能です。-システムは、デバイスのネットワーク・トラフィックを分析することによって、ユーザーがデバイスを所有していることを自動的に確認することができ、リアルタイムの体験を中断することなく開始することができます。

この記事では、Silent Authをどのようにして ビデオ APIと組み合わせることで、リアルタイム・ビデオ用のパスワードなしのオンボーディング・フローを作成する方法を説明します。このチュートリアルでは、再利用可能なアーキテクチャパターンを検討し、重要な実装上の決定を強調するコードスニペットを含みます。

TL;DR: 読み飛ばして、このサンプルの動作コードを以下のサイトで見つけてください。 GitHub.

前提条件

このデモに従うには、以下のものが必要だ:

  • Vonage APIアカウント。

  • Python 3.9以降。

  • Android Studio。

  • モバイルデータ対応SIMを搭載した物理的なAndroidデバイス。

  • アプリケーションを作成するには アプリケーションの作成ページでアプリケーションの名前を定義します。

  • Webhooksを使用するAPIを使用する場合は、秘密鍵が必要です。Generate public and private key "をクリックすると、自動的にダウンロードが始まります。この鍵は紛失すると再ダウンロードできません。この鍵は紛失しても再ダウンロードできません。 private_<あなたのアプリID>.key.この鍵はAPIコールの認証に使用できます。 注意:アプリケーションを保存するまで、キーは機能しません。

  • 必要な機能(Voice、Messages、RTCなど)を選択し、必要なWebhook(イベントURL、応答URL、受信メッセージURLなど)を提供します。これらはチュートリアルで説明します。

  • 保存してデプロイするには、"Generate new application "をクリックして設定を確定します。これでアプリケーションはVonage APIで使用する準備が整いました。

Silent Authによるパスワードレス・リアルタイム・ビデオ認証の仕組み

ここでは、ネットワーク・ベースの認証とVideoオンボーディングが、どのように緊密に結合することなく連携できるかを説明する。

アプリはSilent Authを使用してユーザーの電話番号を検証します。 サポートされている場合自動的に SMSフォールバックが必要です。認証が成功すると、Videoトークンが生成され、ユーザーはセッションに参加します。

認証はビデオが始まる前に終了するため、どのように認証されたかにかかわらず、一貫した体験を得ることができる。

その流れが実際にどのようなものかを紹介しよう:

Screenshot of the Silent Auth verification flow showing automatic device verification

実際のエッジケースへの対応

Silent Auth はオペレータ依存である。携帯電話事業者がネットワークベースの認証をサポートしていない場合、Verify API は HTTP 412 を返します。国別にサポートされている携帯電話事業者の一覧は ドキュメント.サポートされる事業者は国によって異なり、時間の経過とともに変更される可能性があります。

このデモアプリでは、SMSフォールバックがアプリケーション・レベルで実装されています。SMSに加えて その他の認証チャネルRCSやWhatsAppなども利用可能です。

本番用には ネットワーク登録への登録が必要です。テスト環境では 仮想オペレータを物理デバイスなしで使用できます。 ネットワークレジストリにサポートされている番号を登録し、物理デバイスを使用することができます。

サイレント認証の主な実装上の考慮点

Silent Auth を使用する際には、いくつかの実装の詳細が重要です。これらの要素を組み合わせることで、Silent Auth を予測可能で UX を重視した方法で統合することができます。

  1. Silent Authは、認証リクエストがWi-Fiではなく、携帯電話会社のネットワーク経由で送信された場合にのみ機能する。これには通常 クライアント側ライブラリを統合する必要がある。

  2. この実装では、デフォルトの coverage_check=trueの挙動に依存しています。このフラグは、Verify API に対して、認証を開始する前に、指定された番号で Silent Auth がサポートされているかどうかを自動的に評価するように指示します。その番号がサポートされている場合、アプリは Silent Auth で処理を進め、そうでない場合は SMS 認証に戻ります。この カバレッジチェックを参照してください。

  3. この実装では、Silent Auth 同期フロー.このモデルでは、バックエンドは check_urlを Verify API レスポンスから直接受け取るので、 フロントエンドのコールバック処理は不要です。

バックエンドとAndroidクライアントの連携

この実装では、Pythonバックエンドが検証ライフサイクルを所有します。 Vonage Python SDK.AndroidのKotlinクライアントは Vonage Video Android SDKを使用しています。 キャリアネットワーク Android ライブラリを使用して、Silent Authの check_urlを実行します。

1.AndroidクライアントはバックエンドのベースURLで設定される。

object ServerConfig {
    const val CHAT_SERVER_URL: String = "" // Replace with your backend URL
}

2.Retrofitは、このベースURLを使用してバックエンドの検証エンドポイントを呼び出します。

retrofit = Retrofit.Builder()
    .baseUrl(ServerConfig.CHAT_SERVER_URL)
    .addConverterFactory(MoshiConverterFactory.create())
    .client(client)
    .build().also {
        apiService = it.create(APIService::class.java)
    }

3.クライアントは電話をしてバックエンドに電話番号を送ることができる。

apiService?.startVerify(StartVerifyRequest(phone_number = phoneNumber))

4.バックエンドが検証を開始する。を使用する。 coverage_check=true(デフォルト) の場合、Verify API は、宛先オペレータで Silent Auth がサポートされているかどうかを判断します。

  • サポートされている場合は を返します。が返されます。

  • サポートされていない場合、Verify APIはHTTP 412で応答し、バックエンドは明示的にSMSチャネルに切り替える。

def verify_start(body: StartVerifyIn):
    try:
        silent_req = VerifyRequest(
            brand="DemoApp",
            workflow=[SilentAuthChannel(to=body.phone_number)],
            coverage_check=True # Checks whether Silent Auth is supported
        )

        verify_resp = client.verify.start_verification(silent_req) # Initiates Silent Auth verification

        return {
            "request_id": verify_resp.request_id,
            "check_url": getattr(verify_resp, "check_url", None),
            "channel": "silent_auth",
        }

    except HttpRequestError as e:
        if e.response and e.response.status_code == 412:
            sms_req = VerifyRequest(
                brand="DemoApp",
                workflow=[SmsChannel(to=body.phone_number)],
            )

            verify_resp2 = client.verify.start_verification(sms_req) # Fallback to SMS verification

            return {
                "request_id": verify_resp2.request_id,
                "channel": "sms",
            }

        raise

5.バックエンドは、クライアントが必要とする識別子とともに、選択されたチャネルを返す。

{
    "channel": "silent_auth",
    "request_id": "...",
    "check_url": "https://..."

  • チャネルは、クライアントにどのUIパス(silent_authまたはSMS)を取るかを伝える。

  • request_idは後で検証結果を確認するために必要となる。

  • check_urlは、silent_authが選択されている場合にのみ存在します。

6.silent_authの場合、Androidは チェック_urlを実行します。

Silent Authでは、リダイレクトフローをWi-Fiではなく、携帯キャリアネットワーク上で実行する必要があります。Androidクライアントは、セルラー・リクエスト・ライブラリを使用して、モバイル・データ上でこのリクエストを実行します。キャリアネットワーク経由での実行とレスポンスの処理を含むrunSilentAuthCheck()の完全な実装は GitHub リポジトリ.

when (body.channel) {
    "silent_auth" -> runSilentAuthCheck()
    "sms" -> showSmsUi(true)
}

7.Androidがバックエンドにコードを送信し、検証を確認する。

クライアントはそれ自体で成功を決定することはない。代わりにコードをバックエンドに転送し、バックエンドはVerify APIで完了を確認する。

apiService?.confirmVerify(ConfirmVerifyRequest(request_id = rid, code = code))

バックエンドでは、これはVerify API確認呼び出しに対応する。バックエンドは単純なステータスを返すので、クライアントは次に進むことができる。

def verify_confirm_silent(body: ConfirmVerifyIn):
    verify_response = client.verify.check_code(body.request_id, body.code)
    if isinstance(verify_response, str):
        return {"status": verify_response}

    return {"status": getattr(verify_response, "status", str(verify_response))}

ステータスが完了の場合、認証は完了します。そうでない場合、アプリは認証フローに留まります(再試行/コードの再入力)。

8.検証が完了すると、バックエンドは Video トークンを発行する。

token_options = TokenOptions(
    session_id=os.environ["VONAGE_VIDEO_SESSION_ID"], role="publisher"
)

token = client.video.generate_client_token(token_options)

return {
    "apiKey": os.environ["VONAGE_APPLICATION_ID"],
    "sessionId": os.environ["VONAGE_VIDEO_SESSION_ID"],
    "token": token,
}

9.その後、Android ClientはVideo Android SDKを初期化し、発行されたクレデンシャルを使用してセッションに参加する。

if (status == "completed") {
    initializeSession(apiKey, sessionId, token)
}

APIやプラットフォームを超えてこのパターンを拡張する

ここで紹介する実装では、PythonバックエンドとAndroidを使用して、Silent AuthとVideo API機能を接続しているが、このアーキテクチャは他の多くのパターンにも使用できる。

サイレント・オースを超えて

Silent AuthはいくつかのネットワークAPIのひとつに過ぎない。その他のネットワーク信号 SIMスワップまたは デバイスの位置 - は、アクセスを許可する前に評価することができます。価値の高いビデオ会議へのアクセスを許可する前に、SIMスワップの検証を要求することができます。各 API は信頼シグナルを提供し、アプリケーションはそれに対してどのように対処するかを決定します。

VerifyはPython固有ではない

この記事では、Vonage Verify Python SDKを使用した検証を示しますが、同じVerifyフローを他のサポートされているサーバーサイドSDKを使用して実装することもできます。 他のサーバーサイドSDKを使用して実装することができます。アーキテクチャ・パターンは変わりません。また Laravel PHPのscaffoldedワークフロー内でのSilent Authの例もあります。.

iOSにおけるキャリアベースの実行

この例では、キャリアベースのネットワーク実行にAndroidを使用しています。 キャリアベースのネットワークを使用していますが iOS.Silent Authでは、プラットフォームに関係なく、Wi-Fiではなくモバイルキャリアのネットワーク上でリクエストを実行する必要があります。

ビデオSDKはクロスプラットフォーム

Video セッションレイヤーは Android 固有のものではありません。Vonage Video SDK は以下のプラットフォームで利用可能です。 プラットフォームiOSを含むすべてのプラットフォームで利用できるため、同じ "Verify first, then join "パターンを一貫して適用できます。

結論

このチュートリアルでは、Silent AuthとVonage Video APIを使用して、パスワードなしのリアルタイムビデオ認証フローを構築しました。認証をセッションの初期化から分離することで、柔軟性、安全性、将来性のある認証設計を得ることができます。

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

シェア:

https://a.storyblok.com/f/270183/1024x1024/e2a854c044/yukari-dumburs.png
Yukari DumbursVideo APIサポートエンジニア

ゆかりはVonageのシニア・サポート・エンジニアで、5年前にVideo APIサポート・エンジニアリング・チームに加わりました。サーバーおよびアプリケーションエンジニアリングの経歴を持ち、技術的な深みとカスタマーサクセスの架け橋となっています。