Important Notes
- OpenTok.js 2.27.0+ では、以前のバージョンの OpenTok.js を使用しているクライアントに接続する場合、エンドツーエンドの暗号化は機能しません。OpenTok.js 2.27.0+ を使用するようにアプリをアップグレードする際、アプリがエンドツーエンド暗号化を使用する場合は、すべてのクライアントが OpenTok.js 2.27.0+ を使用していることを確認してください。
- WebKitベースのブラウザ(macOS/iOSのSafariやiOSのChromeなど)でのエンドツーエンドの暗号化サポートは、バージョンOpenTok.js 2.30.0以降でのみ利用可能です。
Note about Content Security Policies (CSP)
もし script-src ディレクティブが設定されていることを確認してください。 'wasm-unsafe-eval' が指定されている。そうでない場合、エンドツーエンドの暗号化に必要なWebAssemblyは、ページ上での読み込みと実行がブロックされます。
Initializing a session with a secret
エンドツーエンドの暗号化セッションは、サーバーAPIを使用して作成されます。 REST API).ウェブクライアントがエンドツーエンドで暗号化されたセッションに参加するには OT.initSession() メソッドを使用する:
const session = OT.initSession('api-key', 'session-id', {
encryptionSecret: 'initialEncryptionSecret',
});
有効な秘密は8文字以上256文字以下の文字列である。秘密は後で Session.setEncryptionSecret() メソッド ( シークレット以下同様)。
Checking whether the browser supports end-to-end encryption
を使用する。 OT.hasEndToEndEncryptionSupport() メソッドを使用して、クライアントのブラウザがエンドツーエンドの暗号化をサポートしているかどうかをチェックします:
if (OT.hasEndToEndEncryptionSupport()) {
// Proceed with connecting to the session
}
else {
// Notify the user that they cannot join the session
}
エンドツーエンドの暗号化は現在Firefoxではサポートされていません。
Changing the secret
シークレットは Session.setEncryptionSecret() メソッドを呼び出す:
await session.setEncryptionSecret('newEncryptionSecret');
Events and errors
イベントとエラーは、ユーザー主導の暗号化の動作を管理するために不可欠である。エンドツーエンドの暗号化は、共有秘密モデルを使用します。セッション内の全員が、自分のメディアを暗号化し、他の全員のメディアを復号化するために、同じ秘密を使用することが期待されています。
サブスクライバオブジェクトは encryptionSecretMismatch イベントは、加入者がストリームのメディアをデコードできないときに発生する。接続障害やオーディオ/ビデオのバグが原因ではなく、暗号化の不一致が原因でメディ アが受信できないことをユーザーに伝えることが重要である:
subscriber.on('encryptionSecretMismatch', () => {
// Activate a UI element communicating that there's been an encryption secret mismatch.
});
また、暗号化が正常に有効になったことをユーザーに伝えることも重要である。サブスクライバ・オブジェクトは、以前の不一致の後にサブスクライバがストリームのメ ディアをデコードできるようになると、encryptionSecretMatch イベントをディスパッチします。
また、暗号化が正常に有効になったことをユーザーに伝えることも重要である。サブスクライバ・オブジェクトは、以前の不一致の後にサブスクライバがストリームのメ ディアをデコードできるようになると、encryptionSecretMatch イベントをディスパッチします。
subscriber.on('encryptionSecretMatch', () => {
// Activate a UI element communicating that the media is being properly decrypted.
});
について Session.connect() クライアントが無効な暗号化シークレットで初期化されたエンドツーエンド暗号化セッションに接続しようとすると、コールバックはエラーとともに呼び出される。有効なシークレットは8文字以上256文字以下の文字列である。最良のユーザーエクスペリエンスを得るために、アプリケーションは無効なシークレットを検出してから OT.initSession() メソッドを使用します。以下の例では、セッションが空の(つまり無効な)secretで初期化され、接続時にエラーが発生します:
const session = OT.initSession(
'api-key',
'e2ee-session-id',
{
encryptionSecret: '',
}
)
session.connect('token', (error) => {
if (error && error.name === 'OT_INVALID_ENCRYPTION_SECRET') {
/*
The application should communicate that the secret was invalid.
*/
}
});
について Session.connect() コールバックは、エンドツーエンド暗号化をサポートしていないブラウザでエンドツーエンド暗号化セッションに接続しようとすると、エラーとともに呼び出されます。
const session = OT.initSession(
'api-key',
'e2ee-session-id',
{
encryptionSecret: 'validEncryptionSecret',
}
)
session.connect('token', (error) => {
if (error && error.name === 'OT_UNSUPPORTED_BROWSER') {
/*
The error will have the message 'Tried to connect an e2ee session but the browser does not support e2ee'
The application should communicate that the browser does not support encryption.
*/
}
});
ユーザーが暗号化シークレットを指定せずにエンドツーエンドで暗号化されたセッションで公開しようとすると Session.publish() コールバックはエラーで呼び出される。最高のユーザーエクスペリエンスを得るためには、アプリケーションは session.publish() メソッドを使用する:
session.publish(publisher, (error) => {
if (error && error.name === 'OT_STREAM_CREATE_FAILED') {
/*
The error will have the message 'Tried to publish to an e2ee session but encryption secret was not set'
The application should communicate that the secret was not set.
*/
}
});
もしユーザーが暗号化シークレットを指定せずにエンドツーエンドで暗号化されたセッションに参加しようとした場合、次のようになる。 Session.subscribe() コールバックはエラーで呼び出される。最高のユーザーエクスペリエンスを得るためには、アプリケーションは Session.subscribe() メソッドを使用する:
subscriber = session.subscribe(stream, target, opts, (error) => {
if (error && error.name === 'OT_UNABLE_TO_SUBSCRIBE') {
/*
The error will have the message 'Tried to subscribe to an e2ee stream but encryption secret was not set'
The application should communicate that the secret was not set.
*/
}
});