認証

Vonage APIは、お使いの製品によって異なる認証方法をサポートしています:

1 MessagesはJWT認証とBasic認証の両方をサポートしていますが、Basic認証はWebhookやACLなどの高度な機能をサポートしていません。ほとんどの場合、JWT認証をお勧めします。参照 Messages API 認証

2 VerifyはJWT認証とBasic認証の両方をサポートしているが、Basic認証はWebhookやACLなどの高度な機能をサポートしていない。

3 SIPトランキングは次のような用途に使用します。 ダイジェスト認証 メソッドに、ユーザーとしてAPI Keyを、パスワードとしてAPI Secretを指定します。

内容

この文書では、以下の手段による認証について学ぶことができる:

APIキーとシークレット

Vonageアカウントを作成すると、APIキーとシークレットが作成されます。これらはお客様の アカウント設定 をVonage Dashboardに入力してください。これらは常に安全で これらの詳細は決して共有しないでくださいコードベースに追加する場合は、悪意を持って使用する人と共有されないように注意してください。もし メッセージ署名を使用して生成される。 SIGNATURE_SECRET よりも API_SECRETどちらの値も アカウント設定.

注意:秘密は常に安全に保ち、決して共有してはならない。コードベースに追加するときは、悪意を持って使用する可能性のある人と共有されないように注意してください。詳しくは Vonageアカウントのベストセキュリティプラクティス.

VonageのAPIは、さまざまな方法でAPIキーとシークレットを要求します。

基本認証

新しいVonage APIの多くは、Base64でエンコードされたAPIキーとシークレットを使って認証を行う必要があります。 Authorization ヘッダーを使用する。

これらのAPIでは、以下の方法でAPIキーとシークレットを送信する:

Authorization: Basic base64(API_KEY:API_SECRET)

APIキーが aaa012 そしてあなたのAPIシークレットは abc123456789でキーとシークレットを連結する。 : (コロン)記号を使い、Base64エンコーディングでエンコードすると、次のような値になる:

Authorization: Basic YWFhMDEyOmFiYzEyMzQ1Njc4OQ==

Base64エンコードされた文字列を生成するウェブサイトはこちら:

さまざまなプログラミング言語でBase64文字列をエンコードする方法の詳細は、以下のウェブサイトで見ることができる:

秘密のローテーション

1つのAPIキーに対して、同時に2つのAPIシークレットを使用することができる。こうすることで、本番ネットワークで既存のAPIシークレットを失効させる前に、2つ目のAPIシークレットを作成してテストすることができる。APIシークレットのローテーションは、以下の手順で行う:

  1. に2つ目のAPIシークレットを作成する。 アカウント設定 または 秘密回転API.
  2. Vonage APIへの呼び出しに新しく作成したAPIシークレットを使用するように、1つまたは複数のサーバーを更新します。
  3. 接続に問題がないことをテストし、残りのサーバーにAPIシークレットアップデートを展開する。
  4. 置換されたAPIシークレットを削除する

JSONウェブトークン

JSONウェブトークン(JWT) は、2者間で転送されるクレームを表す、コンパクトでURLセーフな手段である。JWTを使用するAPIの完全なリストについては、表を参照してください。 上記.

ヘッダーとペイロード

JWTはヘッダーとペイロードで構成される。ヘッダーの値は

名称 説明 必須
alg JWTの生成に使用された暗号化アルゴリズム。 RS256 がサポートされている。
typ トークンの構造。以下のように設定します。 JWT.

ペイロードクレームの値は以下の通り:

名称 説明 必須
application_id Vonageによってアプリケーションに割り当てられた固有のID。
iat JWTが要求された瞬間を示すUTC + 0のUNIXタイムスタンプ。
jti JWTの一意な文字列識別子。
nbf JWTが有効になった瞬間を示すUTC + 0のUNIXタイムスタンプ。
exp JWTが無効になった瞬間を示すUTC + 0のUNIXタイムスタンプ。最小値はJWTが生成されてから30秒。最大値はJWTが生成されてから24時間。デフォルト値はJWT生成から15分。

JWTの生成

Vonage CLIを使用してJWTを生成する

について Vonage CLI はJWTを生成するコマンドを提供する。

アプリケーション用にJWTを生成する例を以下に示す:

# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key

# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ

当該秘密鍵は、アプリケーション・ダッシュボードから生成されるか、あるいは vonage apps create.この情報は を実行することで、CLI用にこの情報を保存することができます。 vonage auth set.秘密鍵の内容は、次のいずれかに保存される。 に保存されます。 .vonagerc ファイルまたは $HOME/.vonage/config.json.

Vonage CLI の詳細については、その GitHub のリポジトリ.

JWT を生成するために Vonage ライブラリを使用する例を以下に示します。 以下.Vonage ライブラリを使用していない場合は、以下を参照してください。 RFC 7519 JWTを実装する。

VonageクライアントSDK

ヴォネージ クライアント そして ビデオ SDKは、クライアントがVonageに接続する際の認証にJWTを使用します。これらのJWTは、提供されたアプリケーションIDと秘密鍵を使用して生成されます。 新規アプリケーション作成時.

クレーム

それを使って private.key とアプリケーション ID を入力すると、新しい JWT を作成できます。ユーザーをVonageクライアントにログインさせるために、JWTは以下のクレームを必要とします:

Vonage Client SDK
クレーム 説明
sub 件名」です。この場合の件名は、Vonage Applicationsに作成され関連付けられたユーザーの名前になります。
acl アクセス制御リスト。Client SDKは、これをユーザーのアクセス許可システムとして使用します。詳しくは ACLの概要.
application_id これは作成したVonage ApplicationsのIDです。
iat "Issued at time" これはJWTが発行された時間であり、unixのエポックタイムで表される。
jti "JWT ID".これは、このJWTの一意な文字列識別子である。
exp "有効期限" これは、JWTが期限切れになる将来の時間であり、unixのエポックタイムで表される。

について exp クレームは任意である。 クレームが提供されない場合、JWTはデフォルトで15分で期限切れとなる。JWTの最大有効期限は24時間である。新しいJWTを作成するのは些細なことであり、いくつかのJWTは複数の広範囲に及ぶ権限を持つことができるため、JWTは通常、短命であるべきである。

Client SDK JWT ペイロードのサンプル

すべてのクレームが提供されると、結果としてクレームはこのように表示される:

{
  "iat": 1532093588,
  "jti": "705b6f50-8c21-11e8-9bcb-595326422d60",
  "sub": "alice",
  "exp": "1532179987",
  "acl": {
    "paths": {
      ...
    }
  },
  "application_id": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}

( ... スニペットは切り捨て)

VonageビデオクライアントSDK
クレーム 説明
sub 件名」。この場合、件名は以下の文字列となります。 video.
acl アクセス制御リスト。Client SDKは、これをユーザーのアクセス許可システムとして使用します。詳しくは ACLの概要.
application_id これは作成したVonage ApplicationsのIDです。
session_id のIDである。 セッション あなたが作ったものだ。
scope これはトークンのスコープです。文字列 session.connect.
role これはトークンの役割です。文字列 価値観 このトークンにどのようなパーミッションを与えたいかによって異なります。
data このカスタム・メタデータは、トークンを説明するためにオプションで追加できます。これは文字列で 1000文字.
initial_layout_class_list これにより、ブロードキャスト時にオプションで、最初の レイアウトクラスリスト クライアントが発行したストリームに対して。
iat "Issued at time" これはJWTが発行された時間であり、unixのエポックタイムで表される。
jti "JWT ID".これは、このJWTの一意な文字列識別子である。
exp "有効期限" これは、JWTが期限切れになる将来の時間であり、unixのエポックタイムで表される。

について exp クレームは任意である。 クレームが提供されない場合、JWTはデフォルトで24時間で失効します。Video SDK JWTの最大有効期限は30日です。新しいJWTを作成するのは簡単であり、JWTの中には複数の広範囲に及ぶ権限を持つものもあるため、JWTは通常、短命であるべきです。常に exp の時間を、アプリケーションで実行可能な最小限の時間に短縮する。

サンプル動画 Client SDK JWT ペイロード
{
  "scope": "session.connect",
  "session_id": "1_MX44YjY4NTFmZS01NjdjLTRlODYtYWRmOC0zYmVhODM2MzNjNjB-fjE3NDIzMDY0ODY0NjZ-WS9FOHhybUdHV0JtTGZYTEV2aVlwV1N4fn5-",
  "role": "moderator",
  "initial_layout_class_list": "",
  "sub": "video",
  "acl": {
    "paths": {
      "/session/**": {}
    }
  },
  "jti": "c04c96ba-3229-4fd4-9f55-406b6a6eb485",
  "iat": 1742306486,
  "exp": 1742307386,
  "application_id": "8b6851fe-567c-4e86-adf8-3bea83633c60"
}

アクセス制御リスト(ACL)

の中で サンプルJWTリクエスト・ペイロード 上記の acl クレームには paths オブジェクトが含まれます。パスオブジェクトには、Client SDK を使用する際にユーザーが持つ特定のパーミッションに対応するエンドポイントのリストが含まれています。

以下は、ユーザーにアクセス権を付与できるエンドポイントのリストです:

エンドポイント 説明 必須
/*/rtc/** イベントを受信し、メトリクスを送信するためのシグナリング・セッションを作成する アプリ内通話/メッセージ
/*/sessions/** In-App Voiceまたはチャットユーザーとしてログインする。 アプリ内通話/メッセージ
/*/users/** ユーザー会話、ユーザーセッション、ユーザーオブジェクトの取得 アプリ内通話/メッセージ
/*/conversations/** 会話の作成と管理、メッセージの送受信 アプリ内通話/メッセージ
/*/knocking/** 電話の開始 アプリ内通話
/*/devices/** プッシュ通知を受け取るデバイスを登録する アプリ内通話/メッセージ
/*/legs/** 会話における足の作成と管理 アプリ内通話
/*/session/** ビデオセッションに接続する ビデオ

生成するユーザには、関連するパスにのみアクセスする権限を与える必要があります。例えば、Voice Client SDKユーザが自分のUserオブジェクトや他のユーザの情報を取得する必要がない場合は users のパスを追加します。さらに説明するために /*/conversations/** パスをJWTのACLに追加することで、ユーザーは会話の作成と管理ができるようになる。また、これが のみ ACLが設定されている場合、ユーザーは /conversations エンドポイントである。

注:ACLパスにワイルドカードを使う(例えば /*/conversations/**) は、JWT トークンがそのエンドポイントのすべての操作にアクセスできるようにします。以下に示すように、ACLパスをより細かく制御することを強く推奨します。

粒度の細かいACLパス

上記では、エンドポイントへのアクセスをユーザーに許可する方法について見てきました。サブパスやHTTPメソッドに基づいてアクセスを制限したり付与したりすることもできます。これにより、トークンが持つべきパーミッションを非常に細かく定義することができます。例えば、Voice Client SDK アプリケーションで、ユーザが会話に関する情報を取得できるようにしたいとします:

{
  "acl": {
    "paths": {
      "/*/conversations/**": {}
    }
  }
}

上記のACLパスでは 誰でも にリクエストするために、このトークンを使用する。 いずれも VonageアプリケーションにリンクされたConversation APIエンドポイント。このトークンを持っている人は、あなたのアプリケーションで進行中のConversationのリストを取得したり、新しいConversationを作成したりすることができます。これを軽減するために、アクセス可能なパスと、そのパスで使用できるHTTPメソッドを指定することができます。

{
  "acl": {
    "paths": {
      "/*/conversations/*": {
        "methods": [
          "GET"
        ]
      }
    }
  }
}

この新しいACLパスにより、このトークンを持つ人は誰でも次のことができるようになります。 のみ を作る GET リクエストは特定の会話に限定され、それ以上のサブパスや操作はできない。これは以前よりはるかに制限的だ。

クライアントSDKの最小ACLパス

以下は、Vonage Client SDKs で様々なアクションを実行するために必要な最小 ACL パスです。ユースケースに基づいてより多くのエンドポイントのサポートを追加するには ACLテーブル 上記のように、可能な限り限定的に追加する。

これは、セッションを作成する基本的なユースケースをサポートしている。 serverCall, reconnectCallまた、電話に出たり、拒否したり、電話を切ったりすることができる。

{
  "acl": {
    "paths": {
      "/*/sessions/**": { "methods": ["POST"] },
      "/*/conversations/*": { "methods": ["GET"] },
      "/*/conversations/*/rtc/*/answer": { "methods": ["POST"] },
      "/*/conversations/*/rtc/*/offer/*": { "methods": ["POST"]},
      "/*/conversations/*/members/*": { "methods": ["PUT", "DELETE"] },
      "/*/knocking/**": { "methods": ["POST", "DELETE"] },
      "/*/legs/**": { "methods": ["POST", "GET"] },
      "/*/v2/rtc/**": { "methods": ["POST", "GET"] }
    }
  }
}

Vonage CLIを使用したJWTの生成

について サーバーSDK にはJWTトークンを生成するためのメソッドが含まれています。ただし Vonage CLI を使うこともできる。 これは特にテスト中に役立つ。

# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key `
--sub='Alice' `
--acl='{\"paths\":{\"\/*\/users\/**\":{},\"\/*\/conversations\/**\":{},\"\/*\/sessions\/**\":{},\"\/*\/devices\/**\":{},\"\/*\/push\/**\":{},\"\/*\/knocking\/**\":{},\"\/*\/legs\/**\":{}}}'

# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ

サーバーSDKの使用

Vonageアプリケーションの付属サーバーがクライアントSDK用のJWTを生成することが期待されます。以下はVonage Server SDKを使用した例です:

バージョン3 Vonage Node Server SDK にはJWTトークンを生成するためのパッケージが含まれています。また、JWT 適切なクレームを使って.

const { tokenGenerate } = require('@vonage/jwt');

const privateKey = readFileSync('path/to/private.key');

const aclPaths = {
  "paths": {
    ...
  }
}

const token = tokenGenerate("aaaaaaaa-bbbb-cccc-dddd-0123456789ab", privateKey, {
      //expire in 24 hours
      exp: Math.round(new Date().getTime()/1000)+86400,
      sub: "Alice",
      acl: aclPaths,
    });

( ... スニペットは切り捨て)

Vonageのライブラリを使用していない場合は、以下を参照してください。 RFC 7519 JWTを実装する。 JWT.io には、複数の言語でJWTを生成するためのライブラリが用意されている。